GCC 支持通用说明
- 有关支持的基于 GCC 的编译器列表,请参阅 GNU GCC。
- 您可以使用基于支持的 GCC 编译器的自定义 GCC 编译器构建。但是,可能不支持修改较大的基于 GCC 的编译器或非标准编译器扩展。
- 要使用基于 GCC 的编译器,应确保 GCC 可执行文件所在的目录包含在 $PATH 环境变量中。
GCC 编译器不支持的编译器扩展
以下部分指定了 C/C++test 不支持的 GCC 编译器扩展。这些限制适用于支持的基于 GCC 的编译器,以及自定义 GCC 编译器版本。有关 GNU 编译器扩展的更多信息,请参阅 http://gcc.gnu.org/onlinedocs。
GCC 5.x
不支持的功能
作为函数参数的变长数组
void tester (int len, char data[len][len]) { }
- 复数
- 嵌套函数
返回类型被重写的虚函数
class A { public: virtual void* a(); }; class B: public A { public: virtual B* a(); // Return type changed from void* to (compatible) B*. // It is ok in GCC but EDG will complain };
- Java 扩展(如外部“Java”、java 属性)
- Offsetof 扩展
限制成员函数的指针别名
class T { public: void fn(); }; void T::fn () __restrict__ // EDG won't compile this { }
不兼容性
函数属性
void fatal () __attribute__ ((noreturn)); void fatal () { } typedef void voidfn (); volatile voidfn fatal; // EDG: declaration is incompatible with // "void fatal()"
友元声明
class A; namespace N { class B { friend class A; // In GCC it refers to N::A (which has not been // declared yet), but EDG refers to ::A int _private; }; class A { void foo() { B b; b._private = 0; // EDG inaccessible field. } }; }
GCC 6.x
与 GCC 5.x 相同。
GCC 7.x
与 GCC 5.x 相同。
GCC 8.x
与 GCC 5.x 相同。
不支持某些 C++20 功能。
GCC 9.x
与 GCC 5.x 相同。
不支持某些 C++20 功能。
GCC 10.x
与 GCC 5.x 相同。
不支持某些 C++20 功能。
GCC 11.x
与 GCC 5.x 相同。
不支持某些 C++20 功能。
不支持 C++23 功能。
GCC 12.x
与 GCC 5.x 相同。
不支持某些 C++20 功能。
不支持 C++23 功能。
GCC 13.x
与 GCC 5.x 相同。
不支持某些 C++20 功能。
不支持 C++23 功能。