在C中的函数标准中是`typedef`和`struct`吗?

Eon*_*nil 20 c standards scope typedef function

我使用了这样的代码:

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

    };

    B b;
};
Run Code Online (Sandbox Code Playgroud)

typedefstruct函数内的定义.它与Clang编译,但我想知道(1)它们是否属于标准的一部分.关于(2)是否仅限于在功能范围内被认可.

Jer*_*fin 27

是的,标准允许这样,是的,您以这种方式创建的名称只能在函数内部显示(即,它具有本地范围,就像您定义时一样int i;,i具有本地范围).

它更常见,但要做到这样的事情:

typedef struct { 
    /* ... */ 
} B;
B b;
Run Code Online (Sandbox Code Playgroud)

  • 或者,如果你真的只打算使用一次,`struct {/*...*/} b;`:) (19认同)

Vij*_*jay 5

是的,这是允许的。但是您不能在
函数内部具有函数。

声明应该首先完成,然后再使用实际代码。

在函数内部进行如下操作后,您将无法声明

void A()
{

int a=0;

a++;    

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

    };

    B b;
};
Run Code Online (Sandbox Code Playgroud)

  • C89要求声明/定义在其他语句之前,但C99不需要。 (7认同)