naked (C++)

 

Visual Studio 2017 RC の最新のドキュメントの詳細については、Visual Studio 2017 RC ドキュメントをご参照ください。

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 関数呼び出し

表示: