naked (C++)
Microsoft 固有の仕様 →
naked の属性を指定して宣言した関数にコンパイラにはプロローグとエピローグ コードを記述せずにコードが生成されます。インライン アセンブラー コードを使用して独自のプロローグとエピローグ コード シーケンスを作成するためにこの機能を使用できます。生の関数は特に便利な作成をサポートする仮想デバイス ドライバーです。naked の属性が x86 でのみ有効であることに注意して x64または Itanium で使用しています。
__declspec(naked) declarator
解説
naked の属性が関数定義だけに関連する型修飾子ではないため生の関数は拡張属性および __declspec のキーワードを使用する必要があります。
関数が__forceinline のキーワードが指定されて生の属性でマークされた関数のインライン関数を生成します。
コンパイラは naked の属性は以外のメンバー メソッドのシグネチャ以外に適用するエラーが生成されます。
例
このコードは naked の属性の関数を定義します :
__declspec( naked ) int func( formal_parameters ) {}
または一緒に :
#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}
naked の属性を設定すると関数プロローグとエピローグのシーケンスのコンパイラ生成のコードの種類のみ。などの関数を呼び出すためのコードには影響しません。したがってnaked の属性は関数の型の一部とは見なされず関数ポインターはnaked の属性を指定できません。さらにnaked の属性はデータ定義に適用できません。たとえば次のコード例はエラーを生成します :
__declspec( naked ) int i; // Error--naked attribute not
// permitted on data declarations.
naked の属性は関数のシグネチャだけに関連する関数のプロトタイプで指定することはできません。たとえば次の宣言はコンパイラ エラーになります。:
__declspec( naked ) int func(); // Error--naked attribute not
// permitted on function declarations
終了 Microsoft 固有の仕様→