GNU C および C++ の移植性に関連したフィーチャー

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 セマンティクスはアプリケーションでインプリメントされないということです。 厳密な言語レベル (stdc89stdc99) の下でこれらの拡張機能を使用するソース・コードをコンパイルすると、エラー・メッセージが出されます。

関連参照

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
C++ のみinit_priority
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

関連参照

GNU C および C++ アサーション

アサーション を使用して、 コンパイル済みプログラムが実行するコンピューターまたはシステムの種類をテストします。 アサーション #cpu#machine、および #system が事前定義されています。 また、プリプロセス・ディレクティブ #assert#unassert を使用してもアサーションを 定義できます。

XL C/C++ での GNU C および C++ アサーション
GNU C アサーション 動作
#assert supported
#unassert supported
#cpu supported
可能な値は powerpc
#machine supported
可能な値は powerpcbigendian
#system supported
可能な値は unixposix

その他の GNU C および C++ の移植性に関する問題

GNU C および C++ に関連する以下のフィーチャーは、 拡張言語レベル (extc89extc99extended) の下でサポートされます。

拡張言語レベル (extc89extc99extended) で、 XL C/C++ は以下のフィーチャーの構文を認識しますが、それらのセマンティクスはサポートされていません。

関連参照

Standard C++ Numerics Library ヘッダー・ファイル

XL C++ ヘッダー・ファイル <cmath> および <cstdlib> にある数学関数のすべてが、整数型の引き数を処理できるわけでは ないという点に、注意する必要があります。その理由は、整数型から浮動小数点型への引き数の型変換により、 等しいランクの複数の多重定義解決が作成されるからです。

たとえば、C++ プログラムで unsigned int または unsigned long の絶対値をとると、XL C++ ではそのヘッダーに abs() ライブラリー関数のための必要なすべてのシグニチャーがインプリメントされるにもかかわらず、 その結果は多重定義解決エラーになります。

int abs(int);
long abs(long);
float abs(float);
double abs(double);
long double abs(long double);

この問題は、XL ヘッダー <math.h> および <stdlib.h> を両方ともインクルードしても、残ります。この問題に対する予備手段は、関数で使用される前に、 符号なし整数型の引き数を適切な型にキャストしておくことです。 IBM Copyright 2003