首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >这个C函数应该总是返回false,但它没有

这个C函数应该总是返回false,但它没有
EN

Stack Overflow用户
提问于 2016-04-07 20:27:08
回答 2查看 20.1K关注 0票数 323

很久以前,我在一个论坛上偶然发现了一个有趣的问题,我想知道答案。

考虑下面的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开始,这应该总是返回falsemain函数如下所示:

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编译的。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36476178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档