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