You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言if语句使用函数名作为判断条件的异常行为咨询

问题原理

代码中if (function_returning_false)的写法没有添加函数调用所需的括号(),因此此处判断的不是函数的返回值,而是函数本身的内存地址。

根据C语言语法规则:

  • 单独使用函数名时,函数名会隐式转换为指向该函数的指针
  • 合法定义的函数内存地址永远不会为0(NULL),因此在布尔判断中会永远被判定为真
  • 整个判断逻辑完全没有执行对应的函数,因此无论你怎么修改函数内部的返回值,都不会影响判断结果,这就是你所有修改返回值的测试都无效的原因。

修正方案

只需要在函数名后添加调用括号,即可判断函数实际返回值:

if (function_returning_false()) {
    printf("function returned true\n");
}

补充说明

这类问题属于合法但不符合预期的语法,默认编译不会报错。如果编译时开启高警告等级(例如gcc -Wall),编译器会输出「指针永远为真」类的警告,可以提前发现这类低级错误。


内容的提问来源于stack exchange,提问作者Auri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:24:04