【问题标题】:Syntax of struct, union and enum in C [closed]C中结构,联合和枚举的语法[关闭]
【发布时间】:2014-02-23 22:04:11
【问题描述】:

有时我对 C 中的语法感到很困惑。在 struct 中,所有内容都用分号分隔,最后一个成员后面有一个额外的分号,而在 enum 中,所有内容都用逗号分隔,没有多余的逗号结尾。我总是忘记 struct 中的最后一个分号,因为它对我来说似乎没有意义。这样设计有什么好的理由吗?我希望有人能指出它为什么好让我习惯它,现在它的语法真的很难记住。

【问题讨论】:

    标签: c syntax


    【解决方案1】:

    也许记住这一点的最简单方法是结构和联合基本上是嵌套范围。它们包含声明,只是谎言函数或您的“根”文档(在全局范围内)。

    所以,你声明结构成员:

    struct {
        int member_a;
        int member_b;
    } ;
    

    有点像你声明全局变量或函数成员的方式:

    /* START OF FILE */
    int global_a;
    int global_b;
    /* END OF FILE */
    

    枚举是列表——有点像数组声明,或多个变量等...:

    int arr[] = {1, 2, 3}; //* see note below
    enum Foo { FOO, BAR, BAZ };
    int foo, bar, baz;
    
    // multiple "sub-statements" in one statement
    // note that this is generally considered bad practice.
    foo++, bar++, baz = bar;
    

    或者您可以简单地记住它:分号是语句终止符(它们结束语句),而逗号是分隔符(它们出现在之间 元素)。

    *note: 数组是一个例外,因为它们可以选择允许尾随逗号。至于为什么它们允许在数组中使用它而不允许在枚举中使用它,我无法理解)

    【讨论】:

    • +1,因为 c99 在最后一个枚举常量之后尾随 , 是允许的。
    • 在 GNU C(和 C++)中(由 clang 和 GCC 使用),一个尾随逗号肯定是允许的。我实际上没有看过标准,所以我不确定这是否是扩展。
    • @ouah:真的吗?我以为是 C11 加上了这个,而不是 C99。
    • @RichardJ.RossIII - 这是允许的,但编译器倾向于抱怨它(带有警告)。我不确定哪个-W 启用了该功能,但我认为这是-Wall 启用的警告之一。
    • @TimČas 根据this,实际上是 C99。
    【解决方案2】:

    在 C 中:

    • 逗号是分隔符。值之间。示例:枚举。
    • 分号是终止符。声明和声明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 2011-04-18
      相关资源
      最近更新 更多