为什么返回类型为isalpha()int而不是bool?

时间:2012-09-25 19:51:31

标签: c++ c function

为什么C函数的返回类型如isalpha() int而不是bool,因为它在C#等中使用?

4 个答案:

答案 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;