【问题标题】:Are `typedef` and `struct` inside of a function standard in C?`typedef` 和 `struct` 在 C 中的函数标准内吗?
【发布时间】:2011-08-01 05:41:09
【问题描述】:

我使用了一些这样的代码:

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

    };

    B b;
};

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

【问题讨论】:

    标签: c function scope typedef standards


    【解决方案1】:

    是的,这是允许的。 但你不能拥有
    函数中的函数。

    应该先声明,然后你可以用你的实际代码来做。

    在你的函数内部进行如下操作后,你不能声明

    void A()
    {
    
    int a=0;
    
    a++;    
    
    typedef struct B B;//this is wrong
        struct B
        {
    
        };
    
        B b;
    };
    

    【讨论】:

    • C89 要求声明/定义在其他语句之前,但 C99 没有。
    • @Vijay 你能根据新标准更新答案吗?
    【解决方案2】:

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

    这更常见,但要这样做:

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

    【讨论】:

    • 或者,如果你真的只打算使用一次,struct { /* ... */ } b; :)
    猜你喜欢
    • 1970-01-01
    • 2017-05-13
    • 2017-06-14
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多