Running
clang test.c -o test
在这个文件上
#include <stdio.h>
#include <complex.h>
int main()
{
_Complex double z = 1.0 + _Imaginary_I * 2.0;
return 0;
}
无法编译,因为
error: use of undeclared identifier '_Imaginary_I'.
根据在线酒吧 http://pubs.opengroup.org/onlinepubs/009695399/basedefs/complex.h.html, _Imaginary_I
被定义为。发生了什么?
虚数,以及_Imaginary_I
,是 C 标准中的可选功能。
从 C11 开始,复数也是一个可选功能,但通常得到实现的支持。I
and _Complex_I
应该有效。
根据该标准,您应该能够通过检查以下宏的值来在编译时测试一致性:
-
__STDC_IEC_559_COMPLEX__
: value 1
表示复数和虚数类型存在并且符合 IEC 60559。
-
__STDC_NO_COMPLEX__
: value 1
意味着复杂类型和虚类型都不存在。
但实际上这并不可靠,例如gcc 定义了宏但不支持该功能 https://sourceware.org/bugzilla/show_bug.cgi?id=15720.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)