#pragma map ディレクティブは、ID に対するすべての参照を "name" に変換するようにコンパイラーに指示します。
ここで、
identifier 外部結合を持つデータ・オブジェクトまたは多重定義されていない関数の名前。
ID が多重定義関数またはメンバー関数の名前である場合、プラグマはコンパイラーにより生成された名前をオーバーライドするおそれがあります。これにより、リンク時に問題が生じます。
function_signature 内部リンケージを持つ関数または演算子の名前。この名前は修飾できます。 name 指定したオブジェクト、関数、または演算子にバインドされる外部名。
C++ 名 (C++ のデフォルト・シグニチャーである C++ リンケージ・シグニチャーを持つ名前) にリンクする場合は、マングルされた名前を指定します。下の例の、例 4 を参照してください。
#pragma map を使用して、以下のものをマップしないでください。
このディレクティブは、プログラムのどこに記述してもかまいません。ディレクティブ内に現れる ID は、プロトタイプ引き数リストで使用されるすべての型名を含めて、実際の発生箇所とは無関係に、ディレクティブがファイル・スコープで現れた場合と同様に解決されます。
例 1
int funcname1() { return 1; } #pragma map(func , "funcname1") /* maps func to funcname1 */ int main() { return func(); /* no function prototype needed in C */ }
例 2
extern "C" int funcname1() { return 0; } extern "C" int func(); //function prototypes needed in C++ #pragma map(func , "funcname1") // maps ::func to funcname1 int main() { return func(); }
例 3
#pragma map(foo, "bar") int foo(); //function prototypes needed in C++ int main() { return foo(); } extern "C" int bar() {return 7;}