C (C99+)标准要求(尽管是隐式的)一个一致性实现将__STDC__定义为1。
但是,C标准不需要IEC 60559一致性实现来定义__STDC_IEC_559__ (to 1)。
后果:
#if __STDC__ != 1
/* non-conforming implementation */
#endif
#if __STDC_IEC_559__ != 1
/* may be IEC 60559 conformant implementation */
#endif在这里,我们看到这些宏的语义没有一致性。知道为什么吗?这是一个可能的缺陷吗?
为什么C标准不要求IEC 60559一致性实现来定义__STDC_IEC_559__ (to 1)?
发布于 2022-05-09 10:53:23
定义它符合实现本身的最佳利益。C17 6.10.8.3:
__STDC_IEC_559__整数常量1,用于表示符合附件F中的规范(IEC 60559浮点算法)。
虽然从技术上讲,编译器可能不定义它,但如果它确实符合IEC 60559,则没有任何意义。这是一个质量的实现邮票,就像__STDC__或__STDC_VERSION__一样。
值得注意的是,这个常量仅在C99之后才出现,所以C90实现可能使用IEC 60559而不定义宏常量。
https://stackoverflow.com/questions/72143685
复制相似问题