在C99中用float _complex
静态初始化(+0 -0.0i)
变量的正确方法是什么(在图像中为零和零为零)?
float _Complex a = _Complex_I * (-0.0); // this seems doesn't work
int main()
{
printf("a = (%f %f) \t(0x%016llx)\n",crealf(a),cimagf(a), *((long long*)&a));
}
PS。我需要静态初始化,所以不能使用
__real__ a = 0.0; __imag__ a = 0.0;
答案 0 :(得分:2)
不幸的是,确实没有一个。这就是C标准在C1x中包含CMPLX
宏的原因。
由于我认为您使用的是GCC,因此您可能有兴趣关注this bug。特别是,如果你不介意生活在最前沿,你可能会做类似的事情:
float _Complex a = { 0.0f, -0.0f };
(有关详细信息,请参阅4月28日Jason Merrill提交的讨论)。我不确定,但您可能还需要提交一个单独的错误请求在C前端支持此功能。