Являются ли `typedef` и` struct` стандартом функции в C? - PullRequest
20 голосов
/ 08 апреля 2011

Я использовал такой код:

void A()
{
    typedef struct B B;
    struct B
    {

    };

    B b;
};

typedef и struct определение внутри функции.Он скомпилирован с Clang, но я хочу знать (1), являются ли они частью стандарта или нет.И относительно (2), ограничены ли они, чтобы быть распознанными только в области функций.

Ответы [ 2 ]

27 голосов
/ 08 апреля 2011

Да, стандарт допускает это, и да, имя, которое вы создаете таким образом, видно только внутри функции (т. Е. Оно имеет локальную область, так же, как при определении int i;, i имеет локальную область).

Чаще всего это делают примерно так:

typedef struct { 
    /* ... */ 
} B;
B b;
5 голосов
/ 08 апреля 2011

Да, это разрешено. но вы не можете иметь
функция внутри функции.

декларации должны быть сделаны в первую очередь, а позже вы можете сделать с вашим реальным кодом.

вы не можете объявить после выполнения какой-либо операции внутри вашей функции, как показано ниже

void A()
{

int a=0;

a++;    

typedef struct B B;//this is wrong
    struct B
    {

    };

    B b;
};
...