通用 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 功能。


  • No labels