我正在学习C语言,作为练习,我试着写一个不带任何分号的简单程序。我在替换return 0语句时遇到了一些问题,但我发现这是唯一的(?)用C:if(exit(0),0){}实现的方法。
这条语句到底是如何工作的?
我知道来自stdlib的exit()是一个空函数,但我不明白if中的,0部分是如何工作的(其余的我很清楚)。
发布于 2013-03-09 04:38:37
C中的,运算符计算这两个参数,并返回第二个参数的值。所以这个表达式
exit(0), 0调用exit(0)并返回0。因此,您发布的代码实际上等同于:
exit(0);
if (0) {}但是,exit()应该终止该进程,因此它实际上永远不会返回。这个习惯用法只是用来防止虚假的编译器警告。
发布于 2013-03-09 04:38:02
在学习C语言时,弄清楚如何编写没有分号的程序是没有价值的。听起来你已经偏离了学习C语言的方向,开始玩无用的把戏了。
不过,为了回答您的问题,当您有多个用逗号分隔的语句时,"result“就是最后一个语句。if需要一些带值的语句来计算,因为exit()是空的,所以它没有值。逗号后面0表示if的值。
发布于 2013-03-09 04:49:10
当你写的时候
int i = (5, 7);i assigned 7 not 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请特别注意,由于在if(fun("3"),7) == if(7)中,输出ONE 0的最后一行被打印出来。否则,fun()返回0。
https://stackoverflow.com/questions/15302789
复制相似问题