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

syn*_*gma 3 c exit

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

这个陈述究竟是如何运作的?

我知道,exit()stdlib一个void函数,但我不明白是什么,0在部分if作品(其余的我很清楚).

Bar*_*mar 6

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

exit(0), 0
Run Code Online (Sandbox Code Playgroud)

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

exit(0);
if (0) {}
Run Code Online (Sandbox Code Playgroud)

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

  • 逗号运算符是指定操作数的评估顺序的少数操作符之一.在评估第一个参数后,有一个序列点,甚至. (3认同)
  • `,`以*指定的*顺序计算其操作数:先左,然后右. (3认同)

mah*_*mah 5

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

但是,要回答您的问题,当您用逗号分隔多个语句时,"结果"是最终语句.if需要一些带有值的语句来评估,因为exit()它是无效的,所以它没有任何价值.逗号后面的0为...提供值if.