【发布时间】:2014-02-23 22:04:11
【问题描述】:
有时我对 C 中的语法感到很困惑。在 struct 中,所有内容都用分号分隔,最后一个成员后面有一个额外的分号,而在 enum 中,所有内容都用逗号分隔,没有多余的逗号结尾。我总是忘记 struct 中的最后一个分号,因为它对我来说似乎没有意义。这样设计有什么好的理由吗?我希望有人能指出它为什么好让我习惯它,现在它的语法真的很难记住。
【问题讨论】:
有时我对 C 中的语法感到很困惑。在 struct 中,所有内容都用分号分隔,最后一个成员后面有一个额外的分号,而在 enum 中,所有内容都用逗号分隔,没有多余的逗号结尾。我总是忘记 struct 中的最后一个分号,因为它对我来说似乎没有意义。这样设计有什么好的理由吗?我希望有人能指出它为什么好让我习惯它,现在它的语法真的很难记住。
【问题讨论】:
也许记住这一点的最简单方法是结构和联合基本上是嵌套范围。它们包含声明,只是谎言函数或您的“根”文档(在全局范围内)。
所以,你声明结构成员:
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: 数组是一个例外,因为它们可以选择允许尾随逗号。至于为什么它们允许在数组中使用它而不允许在枚举中使用它,我无法理解)
【讨论】:
, 是允许的。
-W 启用了该功能,但我认为这是-Wall 启用的警告之一。
在 C 中:
【讨论】: