通用 GCC 支持说明
- 请参见GNU GCC 以获取受支持的基于 GCC 的编译器的列表。
- 您可以使用基于受支持的 GCC 编译器之一的自定义 GCC 编译器构建。但是,可能不支持大量修改的基于 GCC 的编译器或非标准编译器扩展。
- 要使用基于 GCC 的编译器,请确保 $PATH 环境变量中包含含有 GCC 可执行文件的目录。
GCC 编译器不支持的编译器扩展
以下各节指定了 C/C++test 不支持的 GCC 编译器扩展。这些限制适用于受支持的基于 GCC 的编译器以及自定义 GCC 编译器构建。有关 GNU 编译器扩展的更多信息,请参见http://gcc.gnu.org/onlinedocs。
GCC 4.0.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 扩展(例如 extern“ Java”,java 属性)
- 偏移量扩展
限制成员函数的指针别名
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()"
Friend 声明
class A; namespace N { class B { friend class A; // In GCC 4.0+ it refer to N::A (which has not been // declared yet) But EDG and older GCCs refer to ::A int _private; }; class A { void foo() { B b; b._private = 0; // EDG inaccessible field. } }; }
GCC 4.1.x
与 GCC 4.0.x 相同。
GCC 4.2.x
与 GCC 4.0.x 相同。
GCC 4.3.x
与 GCC 4.0.x 相同
GCC 4.4.x
与 GCC 4.0.x 相同
GCC 4.5.x
与 GCC 4.0.x 相同
GCC 4.6.x
与 GCC 4.0.x 相同
GCC 4.7.x
与 GCC 4.0.x 相同
GCC 4.8.x
与 GCC 4.0.x 相同
GCC 4.9.x
与 GCC 4.0.x 相同
GCC 5.x
与 GCC 4.0.x 相同。
GCC 6.x
与 GCC 4.0.x 相同
GCC 7.x
与 GCC 4.0.x 相同。
GCC 8.x
与 GCC 4.0.x 相同。
不支持 C++2a 功能。
GCC 9.x
与 GCC 4.0.x 相同。
不支持 C++2a 功能。