【发布时间】:2022-01-03 20:08:49
【问题描述】:
在“C 的完整参考”一书中提到char 默认情况下是无符号的。
但我正在尝试使用 GCC 以及 Visual Studio 来验证这一点。它默认将其作为 已签名。
哪个是正确的?
【问题讨论】:
-
我信任的一本 C 参考书是 Harbison & Steele 的“C: A Reference Manual” (careferencemanual.com)。当然,标准是最终定论,但它的可读性不是很高,并且仅提供了有关标准之外的标准前和常见(即 POSIX)使用的最少量信息。 Harbison & Steele 非常易读、详细,并且可能比大多数参考资料更正确。但是它也不是教程,所以如果您处于学习的初始阶段,那么跳进去可能不是一件好事。
-
我认为您正在阅读的书是 Herbert Schildt 的C: The Complete Reference。来自对这本书的评论 (accu.informika.ru/accu/bookreviews/public/reviews/c/c002173.htm):我不会推荐这本书(你们中的太多人过于重视我的观点),但我认为它不应该受到同样的谴责扔在他的一些其他工作。 正如迈克尔所说,一个更好的参考是 Harbison & Steele。
-
我的两分钱在这里:因为
char可以是无符号的,根据经验,使用int来读取使用getchar()的值,这可能会返回EOF。EOF通常定义为-1或其他负值,存储在unsigned中不是您想要的。声明如下:extern int getchar();BTW,此建议也来自《C: A Reference Manual》一书。 -
我信任的一个 C 参考是 ISO/IEC 9899:2011 :-)
-
@MaxChetrusca 好建议,但理由不好:即使在签名的
char案例中,您也必须使用int来存储返回值。