很久以前,我在一个论坛上偶然发现了一个有趣的问题,我想知道答案。
考虑下面的C函数:
f1.c
#include <stdbool.h>
bool f1()
{
int var1 = 1000;
int var2 = 2000;
int var3 = var1 + var2;
return (var3 == 0) ? true : false;
}
从var3 == 3000
开始,这应该总是返回false
。main
函数如下所示:
main.c
#include <stdio.h>
#include <stdbool.h>
int main()
{
printf( f1() == true ? "true\n" : "false\n");
if( f1() )
{
printf("executed\n");
}
return 0;
}
因为f1()
应该总是返回false
,所以可以预期程序只会在屏幕上打印一个false。但编译运行后,也会显示executed:
$ gcc main.c f1.c -o test
$ ./test
false
executed
为什么会这样呢?这段代码是否有某种未定义的行为?
注意:我是用gcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2
编译的。
https://stackoverflow.com/questions/36476178
复制相似问题