Являются ли `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;
};