#pragma map ディレクティブは、ID に対するすべての参照を「name」に変換するようにコンパイラーに命令します。 そして、"name" がオブジェクト・ファイルとアセンブリー・コードで使用されます。
>>-#--pragma--map--(--+-identifier---------+--,--"name"--)----->< '-function_signature-'
ここで、
identifier | 外部結合を持つデータ・オブジェクトまたは非多重定義関数の名前。
![]() |
function_signature | 内部リンクを持つ関数または演算子の名前。 この名前は修飾できます。 |
name | 指定したオブジェクト、関数、または演算子にバインドされる外部名。
![]() |
ラベル名が以下と同じ場合、コンパイラーは重大エラー・メッセージを出します。
#pragma map を使用して、以下をマップしないでください。
このディレクティブは、プログラムのどこに指定してもかまいません。 ディレクティブ内に現れる ID は、 プロトタイプ引数リストで使用されるすべての型名を含めて、 実際の発生箇所とは無関係に、 ディレクティブがファイル・スコープで現れた場合と同様に解決されます。
プラグマ・マップで指定された名前が 65535 バイトを超えると、通知メッセージが出され、プラグマが無視されます。
例 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;}
以下の例は、#pragma map とアセンブリー・ラベルの間の対話がエラー・メッセージを生成する可能性のある幾つかのケースを示しています。
例 5
#pragma map(a, "abc") // error, since the label name is the same as a map name to a // different identifier int cba asm("abc");
例 6
int abc asm("myID"); //error, since the same label is used on two different variables int cba asm("myID");
プラグマ・マップで以前に指定されているラベル名と異なるラベル名を持つ宣言に asm ラベル指定が適用されると、コンパイラーがエラー・メッセージを生成します。
例 7
#pragma map(a, "aaa") // severe error, since "a" is already mapped by pragma map to a // different name void a() asm("bbb");
例 8
#pragma map(a, "aaa") // Valid declaration, Since "a" is mapped to the same name int a asm("aaa");
プラグマ・マップが ID のマップ名を指定したとき、その名前が、異なる宣言にある以前のアセンブリー・ラベルのマップ名と矛盾している場合、#pragma map は無視され、警告メッセージが表示されます。
例 9
int a asm("abc"); // Warning message, since 'abc' is already used as a label name #pragma map(b, "abc")
#pragma map がすでにアセンブリー・ラベルを持っている ID をマップしようとすると、プラグマ・マップは無視され、警告メッセージが表示されます。
例 10
int a asm("abc"); //Warning, since 'a' already has a label, pragma map is ignored #pragma map(a, "aaa")
例 11
int a asm("abc"); // Valid declaration, Since "a" is mapped to the same name #pragma map(a, "abc")