首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C:解释if(exit(0),0){}行代码

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

Stack Overflow用户
提问于 2013-03-09 04:32:38
回答 5查看 693关注 0票数 3

我正在学习C语言,作为练习,我试着写一个不带任何分号的简单程序。我在替换return 0语句时遇到了一些问题,但我发现这是唯一的(?)用C:if(exit(0),0){}实现的方法。

这条语句到底是如何工作的?

我知道来自stdlibexit()是一个空函数,但我不明白if中的,0部分是如何工作的(其余的我很清楚)。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-03-09 04:38:37

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

代码语言:javascript
复制
exit(0), 0

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

代码语言:javascript
复制
exit(0);
if (0) {}

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

票数 6
EN

Stack Overflow用户

发布于 2013-03-09 04:38:02

在学习C语言时,弄清楚如何编写没有分号的程序是没有价值的。听起来你已经偏离了学习C语言的方向,开始玩无用的把戏了。

不过,为了回答您的问题,当您有多个用逗号分隔的语句时,"result“就是最后一个语句。if需要一些带值的语句来计算,因为exit()是空的,所以它没有值。逗号后面0表示if的值。

票数 5
EN

Stack Overflow用户

发布于 2013-03-09 04:49:10

当你写的时候

代码语言:javascript
复制
int i = (5, 7);

i assigned 7 not 5

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

类似于if(exit(0), 0) == if(0),但(0)执行第一个退出。(未优化为空白)

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

代码语言:javascript
复制
#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);
 }
}

它的输出:

代码语言:javascript
复制
1
2
3
ONE 0

请特别注意,由于在if(fun("3"),7) == if(7)中,输出ONE 0的最后一行被打印出来。否则,fun()返回0

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15302789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档