我正在学习C并且作为练习,我正在尝试编写一个没有任何分号的简单程序。我在替换return 0
语句时遇到了一些麻烦,但我发现这是(唯一的?)方式在C:if(exit(0),0){}
中完成。
这句话究竟是如何运作的?
我知道来自exit()
的{{1}}是一个无效函数,但我不明白stdlib
中的,0
部分是什么(其余部分对我来说很清楚) )。
答案 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 ++中,,
表示“执行此操作然后再执行”,可以在单个语句中编写。