1

在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;
4

1 回答 1

2

不幸的是,真的没有。这就是 C 标准CMPLX在 C1x 中包含宏的原因。

由于我相信您使用的是 GCC,因此您可能有兴趣关注此错误。特别是,如果您不介意生活在最前沿,您可以执行以下操作:

float _Complex a = { 0.0f, -0.0f };

(有关更多详细信息,请参阅 4 月 28 日围绕 Jason Merrill 提交的讨论)。我不确定,但您可能还需要提交一个单独的错误,请求在 C 前端中支持此功能。

于 2011-05-06T17:50:05.603 回答