首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stdint.h和C99

stdint.h和C99
EN

Stack Overflow用户
提问于 2016-05-09 03:11:14
回答 2查看 1.3K关注 0票数 1

我在C99标准中看到stdint.h是C标准库的一部分。

如果我测试C99遵从性,是否正确地阅读了以下内容:

代码语言:javascript
复制
defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)

这意味着stdint.h应该是可用的?

例如:我是否可以考虑一个环境,它假装是C99兼容的,但不提供stdint.h与它自己的遵从性声明不一致,因此出现了错误?

编辑:对于那些好奇的人来说,所讨论的系统是带有HP C编译器的OpenVMS (不是gcc,它在openVMS上提供了stdint.h)。因此,根据到目前为止收到的答复和评论,我不得不把这个实现(假装是C99)看作是错误的。有关更多详细信息:https://groups.google.com/forum/#!topic/comp.os.vms/Bnh3tIOc7bo%5B101-125%5D

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-09 03:17:52

是。

顺便说一句,未定义的符号在预处理表达式中扩展为0,因此您只需编写:

代码语言:javascript
复制
#if __STDC_VERSION__ >= 199901L

另一方面,不声称符合C99 (或C11)的实现可能仍然支持将<stdint.h>作为扩展。

票数 5
EN

Stack Overflow用户

发布于 2016-05-09 06:46:12

stdint.h是强制执行任何符合标准的实现的少数头之一。即使是各种不知名的嵌入式系统编译器也必须这样做。见规范案文C11第4/6章:

合格的托管实现应接受任何严格符合的程序。符合规范的独立实现应接受任何严格符合的程序,其中库子句(第7条)中指定的特性的使用仅限于标准标头、<float.h>, <iso646.h>, <limits.h>, <stdalign.h>, <stdarg.h>, <stdbool.h>, <stddef.h>, <stdint.h>,<stdnoreturn.h>的内容。

因此,您确实可以测试__STDC_VERSION__ >= 199901L,然后报头必须可用。请注意,对inttypes.h没有这样的要求。

例如:我是否可以考虑一个假装符合C99但不提供stdint.h的环境与它自己的遵从性声明(因此是but )不一致?

是。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37107259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档