#c #function #scope #typedef #standards
#c #функция #область видимости #typedef #стандарты
Вопрос:
Я использовал некоторый код, подобный этому:
void A()
{
typedef struct B B;
struct B
{
};
B b;
};
typedef
и struct
определение внутри функции. Они компилируются с помощью Clang, но я хочу знать (1), являются ли они частью стандарта или нет. И о (2) ограничены ли они распознаванием только в области видимости функции.
Ответ №1:
Да, стандарт допускает это, и да, имя, которое вы создаете таким образом, видно только внутри функции (т. Е. Оно имеет локальную область видимости, точно так же, как при определении int i;
, i
имеет локальную область видимости).
Это более распространено, однако делать это примерно так:
typedef struct {
/* ... */
} B;
B b;
Комментарии:
1. или, если вы действительно собираетесь использовать их только один раз,
struct { /* ... */ } b;
🙂
Ответ №2:
Да, это разрешено. но вы не можете иметь
функцию внутри функции.
сначала следует выполнить объявления, а позже вы сможете использовать свой реальный код.
вы не можете объявить после выполнения некоторой операции внутри вашей функции, как показано ниже
void A()
{
int a=0;
a ;
typedef struct B B;//this is wrong
struct B
{
};
B b;
};
Комментарии:
1. C89 требует, чтобы объявления / определения предшествовали другим операторам, но C99 этого не делает.
2. @Vijay не могли бы вы обновить ответ в соответствии с новыми стандартами?