C:解释if(exit(0),0){}代码行

时间:2013-03-08 20:32:38

标签: c exit

我正在学习C并且作为练习,我正在尝试编写一个没有任何分号的简单程序。我在替换return 0语句时遇到了一些麻烦,但我发现这是(唯一的?)方式在C:if(exit(0),0){}中完成。

这句话究竟是如何运作的?

我知道来自exit()的{​​{1}}是一个无效函数,但我不明白stdlib中的,0部分是什么(其余部分对我来说很清楚) )。

6 个答案:

答案 0 :(得分:6)

C中的,运算符计算其两个参数,并返回第二个参数的值。所以表达式

exit(0), 0

调用exit(0)并返回0.因此,您发布的代码实际上等同于:

exit(0);
if (0) {}

但是,exit()应该终止进程,因此永远不会实际返回。这个成语只是用来防止虚假的编译器警告。

答案 1 :(得分:5)

在学习C的过程中,找出如何编写没有分号的程序是没有价值的。听起来你已经偏离了学习C玩无用的技巧。

要回答你的问题,当你用逗号分隔多个语句时,“结果”是最后的语句。 if需要一些带有值的语句来评估,并且由于exit()无效,因此它没有任何价值。该逗号后面的0为if提供了一个值。

答案 2 :(得分:2)

写作时

int i = (5, 7);

i 已分配 7 5

在括号,中,分隔的表达式从LHS执行到RHS。

同样if(exit(0), 0) == if(0),但退出(0)首先执行。 (不优化为空白

我的以下示例及其输出将在一定程度上帮助您了解其行为:

#include<stdio.h>
int fun(char* c){
 printf("%s\n", c);
 return 0;
}
int main(){
 int i = (fun("1"),fun("2"));
 if(fun("3"),7){
   printf("ONE %d", i);
 }
 else{
  printf("TWO %d", i);
 }
}

其输出:

1
2
3
ONE 0

注意特别是输出 ONE 0的最后一个,因为在if(fun("3"),7) == if(7)中。否则fun()会返回0

答案 3 :(得分:1)

只是 comma operator

这意味着返回运算符的正确值,并评估左侧部分。

在这种情况下使用它,因此exit()可以放在if语句中,0作为参数传递,以便在if语句中进行检查(它可以'在无效值上工作。)

答案 4 :(得分:0)

在正常编程中,逗号运算符可被视为与;具有相同的效果。实际上在这种情况下,将评估if内的每个表达式。但是只要调用exit(),程序就会终止。有关逗号operatorFollow的详细信息,请Link

答案 5 :(得分:0)

exit void 函数,无法在if语句中使用。

但是,您可以将其与,0混合使用。编译器使用0作为条件术语,您没有语法错误。

在C / C ++中,,表示“执行此操作然后再执行”,可以在单个语句中编写。