我刚刚遇到了一些过度使用分号的代码,或者使用分号用于我不知道的不同目的。
我在if语句的末尾和函数的末尾发现了分号。例如:
int main (int argc, char * argv[]) {
// some code
if (x == NULL) {
// some code
}; <-----
// more code
return 0;
}; <---
用cc编译,而不是gcc。 那些分号做了什么?我假设没有区别,因为编译器只会将其视为空语句。
答案 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,无论如何都要优化,即编译器不会为这些生成任何实际代码。