为什么 C 函数的返回类型不像在 C# 等中使用的那样isalpha()
int
?bool
问问题
1165 次
4 回答
11
在 C 标准库函数中广泛使用零表示假,非零表示真。其中许多函数起源于任何bool
(或BOOL
, _Bool
)类型通常被使用之前。
具体来说,诸如isalpha
C89 中指定的函数,但直到 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 回答