Microsoft Windowsの場合
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/08/02 03:50 UTC 版)
「名前修飾」の記事における「Microsoft Windowsの場合」の解説
一般的なC・Pascalなどの言語は関数の多重定義をサポートせず、名前修飾を必要としないが、場合によっては名前修飾によって関数についての情報を付加することがある。 例えば、Microsoft Windows 上のコンパイラは複数の呼出規約(サブルーチンとデータをやりとりする方法)をサポートしている。呼出規約の間には互換性がないので、コンパイラは名前修飾によって呼出規約を詳細に記述する。 MSによって確立された名前修飾のスキームがあり、非公式に他のコンパイラもこれに従っている。例えば、Digital Mars・ボーランド・gccである。このスキームは他の言語、例えば、Pascal・D言語・Delphi・FORTRAN・C#にも適用される。このようにして、それら処理系のデフォルトの呼出規約が異なる場合も、それら処理系で作成したサブルーチンが現存のWindows ライブラリを呼んだり、そこから呼ばれたりすることができる。 次のCコードをコンパイルするとしよう: int _cdecl f(int x) { return 0; }int _stdcall g(int y) { return 0; }int _fastcall h(int z) { return 0; } _cdecl はCの標準の呼び出し規約を使うことを明示する修飾子である。 32 bit コンパイラはそれぞれ、以下を出力する。 _f_g@4@h@4 stdcallとfastcallでは、関数名は_名前@X と @名前@Xのようにエンコードされる。Xにはコールスタック(以下単にスタック)に積まれる引数のバイト数が入る。 他の一般的な修飾法は、前置句 (prefix) を、下線付きで(__func__のように)あるいは標準的な大文字化を行ったりして加えるものである。
※この「Microsoft Windowsの場合」の解説は、「名前修飾」の解説の一部です。
「Microsoft Windowsの場合」を含む「名前修飾」の記事については、「名前修飾」の概要を参照ください。
- Microsoft Windowsの場合のページへのリンク