-4

为什么 C 函数的返回类型不像在 C# 等中使用的那样isalpha() intbool

4

4 回答 4

11

在 C 标准库函数中广泛使用零表示,非零表示真。其中许多函数起源于任何bool(或BOOL, _Bool)类型通常被使用之前。

具体来说,诸如isalphaC89 中指定的函数,但直到 C99 才成为布尔类型。

所以期望在 C 标准库函数中看到这一点。您通常会bool在 C++ 代码中看到 used。

于 2012-09-25T19:54:55.777 回答
9

原始C中没有bool数据类型。

检查这个答案的理论:布尔是本机C类型吗?

于 2012-09-25T19:54:20.333 回答
6

在 1999 年标准之前,C 没有专用的布尔数据类型;在此之前,该语言只是假设非零积分表达式表示 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;
于 2012-09-25T20:23:50.040 回答
6

因为 C 本来就没有内置的 bool 类型。

于 2012-09-25T19:52:57.540 回答