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
Microsoft 固有の仕様はここまで
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示