我试图在使用 GCC 编译时使用复杂的文字来解决问题。考虑以下
#include <stdio.h>
#include <complex.h>
int main(void)
{
double complex z = CMPLX(0.0, -1.0);
printf("z = %.1f%+.1fi\n", creal(z), cimag(z));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
(从参考页面稍微修改)。如果我用 Clang 编译,它会按预期工作。但是,如果我使用 GCC,我会收到未定义的引用错误
gcc -std=c11 mwe.c
mwe.c: 6:24 warning: implicit declaration of function 'CMPLX' ...
mwe.c:(...) undefined reference to `CMPLX'
Run Code Online (Sandbox Code Playgroud)
我已经在 Linux 上的 GCC 4.7 和 7.2 和 MacOS 上的 GCC 9 上尝试过这个。错误消息发生了变化,但最终结果保持不变。查看 的参考CMPLX,这应该是有效的 C11。根据这个答案和这篇文章,似乎 GCC 之前接受了这个构造。
我的底线问题是:为什么我不能CMPLX与 GCC 一起使用?