c - if 条件下发生了什么?

标签 c

<分区>

我的一个 friend 问我关于这段代码的事,我和他都不知道 if 条件下发生了什么。你们能解释一下这种情况是如何工作的吗?

int main()
{
   int i;

   if (i = (1, 2, 0))
       printf("Mehrose");
   else
       printf("Hello ");

   printf("%d\n", i);

   return 0;
}

这段代码的输出是 Hello 0

最佳答案

首先,当编译器看到我们得到的代码时进行格式化:

int main(void)
{
   int i;
   if(i=(1,2,0))
      printf("Mehrose");
   else 
      printf("Hello");
   printf("%d\n",i);
   return 0;
}

if语句可以分解:

  1. Comma operator , 首先计算,运算符的左侧被丢弃。这对每个运算符(operator)重复:

    if(i=(1,2,0))

    if(i=(2,0))

    if(i=0)

  2. assignment operator = 将值0 赋给i,并返回表达式的右侧:

    if(0)

  3. 回想一下,0 被评估为 false(“虚假”),1 被评估为 true(“真实”)。因此第一个条件失败,第二个 block 被执行。 “Hello”被打印到标准输出流,后面跟着“0”。

关于c - if 条件下发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58733176/

相关文章:

c - 关于默认整数值的问题

c - 'table' 未声明(首先在函数中使用它)

c++ - C中奇怪的指针表示法

c - #undef-ing 在实践中?

c - C 中的多个输入

c - 我的链接器会链接不需要的源文件中的对象吗?

c - 在目录树中搜索文件

c - C 中的可移植嵌套函数

c - C 中的链表 : Having issues with entering string and displaying it

c - 用新字符串替换字符串模式