全般的な 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 拡張 ( extern "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()"
  • friend 宣言

    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 の機能はサポートされていません。

  • No labels