运行
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'.
根据onlinepubs,定义了_Imaginary_I
。发生了什么事?
答案 0 :(得分:3)
虚数和_Imaginary_I
是C标准中的可选功能。
复数也是C11的可选功能,但通常受实现支持。 I
和_Complex_I
应该有效。
根据标准,您应该能够通过检查以下宏的值来在编译时测试一致性:
__STDC_IEC_559_COMPLEX__
:值1
表示存在复杂和虚构类型,符合IEC 60559。__STDC_NO_COMPLEX__
:值1
表示既不存在复杂类型也不存在虚构类型。然而在实践中,这是不可靠的,例如gcc defines the macro without supporting the feature