#pragma complexgcc ディレクティブは、複合タイプのパラメーターのやり取りの方法をコンパイラーに命令する。
>>-#--pragma--complexgcc--(--+-on--+--)------------------------>< +-off-+ '-pop-'
サブオプションは以下のことを行います。
on | -qfloat=complexgcc をスタックにプッシュします。これは、汎用目的のレジスターを使用して、複合タイプのパラメーターのやり取りに、GCC 規則を使用するようコンパイラーに命令します。 |
off | -qfloat=nocomplexgcc をスタックにプッシュします。これは、浮動小数点レジスターを使用して、複合タイプのパラメーターのやり取りに AIX 規則を使用するようコンパイラーに命令します。 |
pop | スタックから現在の設定を除去し、直前の設定を復元します。 スタックが空のときは、コンパイラーは -qfloat=[no]complexgcc 設定が コマンド行に指定されていることを想定し、指定されていないと、-qfloat=[no]complexgcc には コンパイラーのデフォルトが使用されます。 |
このプラグマの現行設定は、この設定が有効な間に宣言または定義された関数だけに影響します。その他の関数には影響しません。
関数に対するポインターから関数を呼び出すと、-qfloat=[no]complexgcc コンパイラー・ オプションによって、必ず規則設定が使用されます。コンパイラーを呼び出すときに、この オプションがコマンド行に明示的に設定されていないと、このオプションについての コンパイラーのデフォルトが使用されます。複合値を渡す関数を値またはリターン複合値で ミックス・アンド・マッチさせると、エラーが発生します。
例えば以下のコードが -qfloat=nocomplexgcc で コンパイルされるとします。
#pragma complexgcc(on) void p (_Complex double x) {} #pragma complexgcc(pop) typedef void (*fcnptr) (_Complex double); int main() { fcnptr ptr = p; /* error: function pointer is -qfloat=nocomplexgcc; function is -qfloat=complexgcc */ }
関連情報