GNU C で開発されるアプリケーションまたはコードの移植を容易にするために 、XL C/C++ は C99 と標準 C++ に対する GNU C および C++ 言語拡張機能のサブセットをサポートします。 このセクションの表では、 サポートされるフィーチャー、サポートされないフィーチャー、および 構文は受け入れられるがセマンティクスは無視されるフィーチャーがリストされます。
C コードでサポートされる 拡張機能を使用するために、 xlc または cc 呼び出しコマンドを使用するか、または -qlanglvl=extc89、-qlanglvl=extc99、または -qlanglvl=extended のうち 1 つを指定してください。 デフォルトでは、C++ のサポートされているすべての GNU C および C++ フィーチャーが受け入れられます。
以下の表では accept/ignore とマークされた拡張機能は、 受け入れ可能なプログラミング・キーワードとしてコンパイラーに認識はされますが 、GNU C/C++ セマンティクスはサポートされていません。 これは、コンパイラーが accept/ignore キーワードまたは拡張機能を検出する場合、 コンパイルは停止せず、GNU セマンティクスはアプリケーションでインプリメントされないということです。 厳密な言語レベル (stdc89、stdc99) の下でこれらの拡張機能を使用するソース・コードをコンパイルすると、エラー・メッセージが出されます。
関連参照
GNU C および C++ 言語拡張機能は、http://gcc.gnu.org/onlinedocs の GNU マニュアルで完全に文書化されています。
関数の宣言または定義を行う際に、特殊な属性を指定するには、
キーワード __attribute__ を使用します。
このキーワードには、二重括弧内に属性仕様が続きます。
XL C/C++ は、GNU C および C++ の関数属性のサブセットをサポートします。
accept/ignore と記述された振る舞いの意味は、
構文は受け入れられるものの、セマンティクスは無視され、コンパイルが続行するということです。
GNU C/C++ の XL C/C++ との関数属性の互換性 | |
関数属性 | 動作 |
---|---|
alias | supported |
always_inline | supported |
cdecl | accept/ignore |
const | supported |
constructor | supported |
destructor | supported |
dllexport | accept/ignore |
dllimport | accept/ignore |
eightbit_data | accept/ignore |
exception | accept/ignore |
format | supported |
format_arg | supported |
function_vector | accept/ignore |
interrupt | accept/ignore |
interrupt_handler | accept/ignore |
longcall | accept/ignore |
model | accept/ignore |
no_check_memory_usage | accept/ignore |
no_instrument_function | accept/ignore |
noinline | supported |
noreturn | supported |
pure | supported |
regparm | accept/ignore |
section | supported |
stdcall | accept/ignore |
tiny_data | accept/ignore |
weak | supported |
関連参照
キーワード __attribute__ を使用して、
変数または構造化フィールドの特殊な属性を指定します。このキーワードには、二重括弧内に属性仕様が続きます。
XL C/C++ は、GNU C および C++ の変数属性のサブセットをサポートします。
accept/ignore と記述された振る舞いの意味は、
構文は受け入れられるものの、セマンティクスは無視され、コンパイルが続行するということです。
GNU C/C++ の XL C/C++ との変数属性の互換性 | |
変数属性 | 動作 |
---|---|
aligned | supported |
![]() | supported |
mode | supported |
model | accept/ignore |
nocommon | supported |
packed | supported |
section | supported |
transparent_union | supported |
unused | accept/ignore |
weak | supported |
関連参照
キーワード __attribute__ を使用して、struct および union 型を定義する際に、
それらの特殊な属性を指定します。
このキーワードには、二重括弧内に属性仕様が続きます。
XL C/C++ は、GNU C および C++ の型属性のサブセットをサポートします。
accept/ignore と記述された振る舞いの意味は、
構文は受け入れられるものの、セマンティクスは無視され、コンパイルが続行するということです。
GNU C/C++ の XL C/C++ との型属性の互換性 | |
型属性 | 動作 |
---|---|
aligned | supported |
packed | supported |
transparent_union | サポート |
unused | accept/ignore |
関連参照
アサーション を使用して、
コンパイル済みプログラムが実行するコンピューターまたはシステムの種類をテストします。
アサーション #cpu、#machine、および #system が事前定義されています。
また、プリプロセス・ディレクティブ #assert と #unassert を使用してもアサーションを
定義できます。
XL C/C++ での GNU C および C++ アサーション | |
GNU C アサーション | 動作 |
---|---|
#assert | supported |
#unassert | supported |
#cpu |
supported 可能な値は powerpc |
#machine |
supported 可能な値は powerpc と bigendian |
#system |
supported 可能な値は unix と posix |
GNU C および C++ に関連する以下のフィーチャーは、 拡張言語レベル (extc89、extc99、extended) の下でサポートされます。
拡張言語レベル (extc89、extc99、extended) で、 XL C/C++ は以下のフィーチャーの構文を認識しますが、それらのセマンティクスはサポートされていません。
関連参照
XL C++ ヘッダー・ファイル <cmath> および <cstdlib> にある数学関数のすべてが、整数型の引き数を処理できるわけでは ないという点に、注意する必要があります。その理由は、整数型から浮動小数点型への引き数の型変換により、 等しいランクの複数の多重定義解決が作成されるからです。
たとえば、C++ プログラムで unsigned int または unsigned long の絶対値をとると、XL C++ ではそのヘッダーに abs() ライブラリー関数のための必要なすべてのシグニチャーがインプリメントされるにもかかわらず、 その結果は多重定義解決エラーになります。
この問題は、XL ヘッダー <math.h> および <stdlib.h>
を両方ともインクルードしても、残ります。この問題に対する予備手段は、関数で使用される前に、
符号なし整数型の引き数を適切な型にキャストしておくことです。