为何定义为int类型的函数会返回bool类型?返回值应与定义类型一致吗?
问题解答
为何
int hum2()函数会返回布尔类型值?函数的返回值不应该和我定义的类型一致吗?比如float类型函数返回float值,double类型函数返回double值。
测试代码如下:
#include<stdio.h> int hum2() { return true; } bool hum(){ return false; } int main() { printf("%d\n",hum2()); printf("%d\n",hum()); return 0; }
核心原理说明
- C语言从C99标准才开始正式支持布尔类型,原生关键字为
_Bool,平时使用的bool、true、false均是<stdbool.h>头文件定义的宏:bool是_Bool的别名,true展开为整数常量1,false展开为整数常量0,本质都是整数。 - C语言支持数值类型的隐式安全转换:只要返回值的类型可以被函数声明的返回类型正确容纳,编译器就会自动完成类型转换,不会报错。你在
int类型的hum2函数中返回true,本质就是返回整数1,和int类型完全兼容,不存在冲突。 - 布尔类型
_Bool本身就属于整数类型的子类,只能存储0和1两个值,所以你用%d格式化输出hum函数的返回值时,_Bool类型会自动做整数提升转为int类型,最终输出0。
代码潜在问题
你当前的代码没有引入<stdbool.h>头文件,在严格编译规则下(比如gcc使用-std=c99 -Wall -Werror编译参数)会直接报错,因为bool、true、false都属于未定义的标识符。如果是在C++环境下运行,bool、true、false是内置关键字,也支持布尔值向int的隐式转换,返回逻辑和C语言一致。
内容的提问来源于stack exchange,提问作者Efty Shan Abid
相关产品推荐
相关产品推荐

