C99添加了一个宏__STDC_IEC_559__,可用于测试编译器和标准库是否符合ISO/IEC/IEEE 60559(或IEEE 754)标准.
根据这个问题的答案,
如何检查-ieee-754-单精度-32位浮点表示,大多数C编译器不设置预处理器宏__STDC_IEC_559__.
根据海湾合作委员会的文件,它没有定义__STDC_IEC_559__.
我用GCC 4.9.2和Clang 3.6.0测试了这两个,使用glibc2.21使用以下代码.
//test.c
//#include <features.h>
int main(void) {
#if defined ( __STDC_IEC_559__ )
//#if defined ( __GCC_IEC_559__ )
return 1;
#else
return 0;
#endif
}
Run Code Online (Sandbox Code Playgroud)
然后
echo $?
Run Code Online (Sandbox Code Playgroud)
这表明此代码__STDC_IEC_559__是使用GCC定义的,而不是使用Clang定义的.然后我做了gcc -E,它显示该文件stdc-predef.h包含在内.这个文件定义__STDC_IEC_559__.
/* glibc's intent is to support the IEC 559 math functionality, real
and complex. If the GCC (4.9 and later) predefined macros
specifying compiler intent …Run Code Online (Sandbox Code Playgroud) 我与谁在使用旧版本的GCC(3.2.3确切地说),但想要升级客户端和一个已经给出绊脚石升级到新版本的一个原因是工作型的大小不同float_t,其,果然是正确的:
在GCC 3.2.3上
sizeof(float_t) = 12
sizeof(float) = 4
sizeof(double_t) = 12
sizeof(double) = 8
Run Code Online (Sandbox Code Playgroud)
关于GCC 4.1.2
sizeof(float_t) = 4
sizeof(float) = 4
sizeof(double_t) = 8
sizeof(double) = 8
Run Code Online (Sandbox Code Playgroud)
但这种差异的原因是什么?为什么尺寸变得越来越小,时应该和不应该使用float_t或double_t?