【发布时间】:2021-10-26 07:23:20
【问题描述】:
我在使用带有-std=gnu++17 的g++(我尝试了版本8 到11)时遇到了编译错误,但是使用选项-std=c++17 可以编译相同的代码。
#include <complex.h>
int main()
{
int I=0;
return I;
}
使用选项-std=gnu++17,这会导致以下错误:
error: invalid cast from type '__complex__ float' to type 'int'
5 | int I=0;
使用选项-std=c++17 编译时不会出现警告和错误。
我知道在complex.h 标头中有一个宏定义#define I _Complex_I。 gcc 文档说选项 -std=gnu++17 添加了相应 c++ 标准的 GNU 方言。尽管如此,我还是不明白为什么这会导致上述程序的编译有所不同。
背景:
当我开始使用 cmake 功能 cxx_std_17 时遇到了这种行为,它添加了标志 std=gnu++17 并导致各种编译错误,因为一个第三方库使用标识符 I 而另一个包含标头 complex.h。
【问题讨论】:
-
对于
std=gnu++17,标识符I为库保留。不要使用std=gnu++17。
标签: c++ gcc compiler-errors