我在使用 g++(我尝试了版本 8 到 11)时遇到了编译错误,-std=gnu++17
但可以使用选项编译相同的代码-std=c++17
。
#include <complex.h>
int main()
{
int I=0;
return I;
}
使用 option -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
而另一个包含 header complex.h
。