次の方法で共有


naked (C++)

Microsoft 固有の仕様 →

naked 属性を指定して宣言されている関数の場合、コンパイラでプロローグおよびエピローグ コードのないコードが生成されます。 この機能を使用して、プロローグとエピローグのコード シーケンスをインライン アセンブラー コードで独自に記述できます。 naked 関数は、仮想デバイス ドライバーの記述用に特に便利です。 naked 属性は x86 と ARM でのみ有効であり、x64 では使用できないことに注意してください。

__declspec(naked) declarator

解説

naked 属性は関数の定義だけに関連し、型修飾子には関連しないため、naked 関数は拡張属性構文と __declspec キーワードを使用する必要があります。

コンパイラは、関数もまた __forceinline キーワードでマークされていても、naked 属性でマークされた関数のインライン関数を生成できません。

メンバーではないメソッドの定義以外のすべてに 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

END Microsoft 固有の仕様

参照

関連項目

__declspec

C++ キーワード

naked 関数呼び出し