C语言中if语句和函数末尾的分号

时间:2009-05-11 05:25:30

标签: c

我刚刚遇到了一些过度使用分号的代码,或者使用分号用于我不知道的不同目的。

我在if语句的末尾和函数的末尾发现了分号。例如:

int main (int argc, char * argv[]) {
    // some code

    if (x == NULL) {
        // some code
    };  <-----

    // more code

    return 0;
}; <---

用cc编译,而不是gcc。 那些分号做了什么?我假设没有区别,因为编译器只会将其视为空语句。

7 个答案:

答案 0 :(得分:33)

他们什么都不做。我怀疑,这是一个非常不懂语言的人的标志。

如果这是源代码,你理所当然地“拥有”,我会删除代码并尝试与编写代码的人轻轻聊聊。

答案 1 :(得分:7)

那是虚拟陈述。您的样本与

相同
if (x == NULL) {
 // some code
 do_something_here();
}

/* empty (dummy statement) here */ ;

// more code
some_other_code_here();

答案 2 :(得分:5)

你是对的,编译器认为它们是空语句。它们不是必需的,我想程序员不知何故认为它们是。

答案 3 :(得分:2)

第一个分号(在if语句之后)只是一个空表达式,什么都不做。我没有看到在那里有任何意义。

第二个分号(在函数之后)是一个错误,因为它在任何代码块之外。编译器应该发出警告。

答案 4 :(得分:1)

不需要这些分号(如你所说,它们是空语句)。您的代码使用gcc进行编译,前提是定义了'x'(检查http://www.codepad.org)。 C编译器没有理由拒绝编译代码。

答案 5 :(得分:0)

我认为作者可能会选择以下内容:

if(condition for tbd block)
    ;
else {
    //Some code here
}

如果你是脚手架代码并且仍然希望它编译,你可能会这样做。很有可能这只是乔恩建议的错误。

答案 6 :(得分:0)

这些分号是没用的,正如其他人已经指出的那样。我想要添加的唯一内容是IMO,无论如何都要优化,即编译器不会为这些生成任何实际代码。