为什么C函数的返回类型如isalpha()
int
而不是bool
,因为它在C#等中使用?
答案 0 :(得分:11)
false 为零, true 为零,在C标准库函数中广泛使用。其中许多功能是在通常使用任何bool
(或BOOL
,_Bool
)类型之前发起的。
具体来说,isalpha
等函数在C89中指定,但在C99之前不是布尔类型。
所以期望在C标准库函数中看到这一点。您通常会在C ++代码中看到bool
。
答案 1 :(得分:9)
原始 C 中没有 bool 数据类型。
检查理论答案:Is bool a native C type?
答案 2 :(得分:6)
因为C最初没有内置bool类型。
答案 3 :(得分:6)
C在1999年标准之前没有专用的布尔数据类型;在此之前,语言简单地假设非零积分表达式表示True,零值积分表达式表示False。
许多标准库(包括isalpha
函数)早于bool
数据类型的引入,因此这些函数返回int
作为布尔值。为什么WG14没有改变C99的接口?有一个很多的遗留代码是根据C89和更早版本编写的,这样的接口更改会破坏该代码,WG14(负责维护语言标准的委员会)可以理解为不愿意做。哎呀,他们花了20多年的时间才摆脱gets
图书馆电话。
至于第二个问题,C ++中的输出<<
运算符将char *
与其他指针类型区别对待,并假设它指向C样式字符串的开头。如果您希望<<
显示实际指针值,则需要将其强制转换为void *
(或执行类似愚蠢的操作):
char *str = "This is a test";
...
cout << "str = " << str << "; address = " << (void *) str << endl;