c++ - 相同 '==' 条件下的两个 'if' 相等运算符未按预期工作

标签 c++ c compiler-construction operators equals-operator

我正在尝试建立三个相等变量的相等性,但以下代码没有打印它应该打印的明显正确答案。有人可以解释一下,编译器是如何在内部解析给定的 if(condition) 的吗?

#include<stdio.h>
int main()
{
        int i = 123, j = 123, k = 123;
        if ( i == j == k)
                printf("Equal\n");
        else
                printf("NOT Equal\n");
        return 0;
}

输出:

manav@workstation:~$ gcc -Wall -pedantic calc.c
calc.c: In function ‘main’:
calc.c:5: warning: suggest parentheses around comparison in operand of ‘==’
manav@workstation:~$ ./a.out
NOT Equal
manav@workstation:~$

编辑:

根据下面给出的答案,以下语句是否可以检查以上相等性?

if ( (i==j) == (j==k))

最佳答案

  if ( (i == j) == k )

  i == j -> true -> 1 
  1 != 123 

为了避免这种情况:

 if ( i == j && j == k ) {

不要这样做:

 if ( (i==j) == (j==k))

你会得到 i = 1, j = 2, k = 1 :

 if ( (false) == (false) )

...因此错误的答案;)

关于c++ - 相同 '==' 条件下的两个 'if' 相等运算符未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2155280/

相关文章:

c++ - Ncurses 和 gdb 屏幕在调试时重叠。所以我想把两个屏幕分开

c++ - CodeLite 不使用全局编译设置或项目编译设置

compiler-construction - JIT 编译器如何运行

C - 函数的隐式声明 "pthread_timedjoin_np"

objective-c - Xcode 5 build设置 "Unused Functions"的实际作用是什么?

Java 死代码消除……这段代码是否有被优化掉的风险?

c++ - 程序终止后几秒钟后重新启动

c++ - gSoap 的 gSoapWinhttp 插件是否支持 linux

c - 返回结构体成员起始字节的结构体指针

将 16 字节 IPv6 转换为冒号分隔的字符串