Являются ли `typedef` и` struct` внутри стандартного функции в C?
Я использовал такой код:
void A()
{
typedef struct B B;
struct B
{
};
B b;
};
typedef
и struct
внутри функции. Он скомпилирован с Clang, но я хочу знать (1), являются ли они частью стандарта или нет. И о (2) ограничены ли они только в области видимости функции.
Ответы
Ответ 1
Да, стандарт позволяет это, и да, имя, которое вы создаете таким образом, видимо только внутри функции (т.е. оно имеет локальную область, точно так же, как при определении int i;
, i
имеет локальную область).
Это более распространено, однако, чтобы сделать это примерно так:
typedef struct {
/* ... */
} B;
B b;
Ответ 2
Да, это разрешено.
но вы не можете иметь
функция внутри функции.
объявления должны выполняться сначала, а затем вы можете сделать с вашим фактическим кодом.
вы не можете объявить после выполнения какой-либо операции внутри вашей функции, как показано ниже
void A()
{
int a=0;
a++;
typedef struct B B;//this is wrong
struct B
{
};
B b;
};