【发布时间】:2020-01-05 14:11:32
【问题描述】:
我试图在使用 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;
}
(对the reference page 稍作修改)。如果我用 Clang 编译,它会按预期工作。但是,如果我使用 GCC,我会得到一个未定义的引用错误
gcc -std=c11 mwe.c
mwe.c: 6:24 warning: implicit declaration of function 'CMPLX' ...
mwe.c:(...) undefined reference to `CMPLX'
我已经在 Linux 上使用 GCC 4.7 和 7.2 以及在 MacOS 上使用 GCC 9 进行了尝试。错误消息发生变化,但最终结果保持不变。查看reference for CMPLX,这应该是有效的C11。基于this answer 和this post,看来GCC 以前接受过这种构造。
我的底线问题是:为什么我不能将CMPLX 与 GCC 一起使用?
【问题讨论】:
-
错误信息改变了,但最终结果保持不变 - 如何改变?
-
CMPLX在 C11 中显然是有效的:7.3.9.3 The CMPLX macros -
无法在wandbox.org上的两个 GCC 版本上重现
-
@eugene 微不足道的错误格式差异。两行对一行,包括触发与否的标志。
-
您的
gcc命令是别名还是直接执行正确的gcc可执行文件本身?不管你的gcc命令接受-std=c11参数然后不能正确处理CMPLX这一事实很奇怪。
标签: c gcc complex-numbers