代码如下: 它给出了输出true2。
#include<stdio.h>
int main()
{
int a=10;
if(a==a--)
printf("true 1\t");
a=10;
if(a==--a)
printf("true2 \t");
return 0;
}
答案 0 :(得分:2)
两个if
语句中的比较结果为undefined behaviour。所以,任何事都可能发生。因为a
被读取和修改而没有插入序列点。比较运算符==
不会引入序列点。您可能需要了解未定义的行为和sequence points等,以便更好地理解问题。
现代编译器也可能对您有所帮助。例如,Clang发布:
warning: unsequenced modification and access to 'a' [-Wunsequenced]
if(a==a--)
~ ^
warning: unsequenced modification and access to 'a' [-Wunsequenced]
if(a==--a)
~ ^
用于两个if
语句(GCC也会使用gcc -Wall -Wextra
生成类似的警告)。
答案 1 :(得分:0)
一般来说,在一个条件中做一个 - (或--a)并不是一个好习惯,因为它不清楚。 要了解a - 和 - a之间的区别,请参阅答案:Incrementing in C++ - When to use x++ or ++x?