在C语言中,`typedef`和`struct`是否在函数标准中?

在C语言中,`typedef`和`struct`是否在函数标准中?,c,function,scope,typedef,standards,C,Function,Scope,Typedef,Standards,我使用了如下代码: void A() { typedef struct B B; struct B { }; B b; }; typedef struct { /* ... */ } B; B b; 函数中的typedef和struct定义。它是用叮当声编译的,但我想知道(1)它们是否是标准的一部分。关于(2)它们是否仅限于在功能范围内被识别 是的,标准允许这样做,是的,您以这种方式创建的名称仅在函数内部可见(即,它具有局部作用域,就像

我使用了如下代码:

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

    };

    B b;
};
typedef struct { 
    /* ... */ 
} B;
B b;

函数中的
typedef
struct
定义。它是用叮当声编译的,但我想知道(1)它们是否是标准的一部分。关于(2)它们是否仅限于在功能范围内被识别

是的,标准允许这样做,是的,您以这种方式创建的名称仅在函数内部可见(即,它具有局部作用域,就像您定义
int i;
i
具有局部作用域时一样)

但是,更常见的是这样做:

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

    };

    B b;
};
typedef struct { 
    /* ... */ 
} B;
B b;
是的,这是允许的。 但是你不能有
函数中的函数

声明应该首先完成,然后才可以使用实际代码

在函数内部执行以下操作后,不能进行声明

void A()
{

int a=0;

a++;    

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

    };

    B b;
};

或者,如果您真的只打算使用它一次,
struct{/*…*/}b:)C89要求声明/定义优先于其他语句,但C99不要求。@Vijay能否根据新标准更新答案?