naked (C++)naked (C++)

Microsoft 固有の仕様Microsoft Specific

宣言されている関数、 naked属性に、コンパイラは、プロローグおよびエピローグ コードなしのコードを生成します。For functions declared with the naked attribute, the compiler generates code without prolog and epilog code. この機能を使用して、プロローグとエピローグのコード シーケンスをインライン アセンブラー コードで独自に記述できます。You can use this feature to write your own prolog/epilog code sequences using inline assembler code. naked 関数は、仮想デバイス ドライバーの記述用に特に便利です。Naked functions are particularly useful in writing virtual device drivers. なお、 naked属性は x86 と ARM でのみ有効ですし、x64 では使用できません。Note that the naked attribute is only valid on x86 and ARM, and is not available on x64.


__declspec(naked) declarator


Naked属性は関数の定義に関連するのみであり、型修飾子ではない、naked 関数は、拡張属性構文を使用する必要があります、 _ _declspecキーワード。Because the naked attribute is only relevant to the definition of a function and is not a type modifier, naked functions must use extended attribute syntax and the __declspec keyword.

関数も付いて場合でも、コンパイラが、naked 属性でマークされた関数のインライン関数を生成することはできません、 _ _forceinlineキーワード。The compiler cannot generate an inline function for a function marked with the naked attribute, even if the function is also marked with the __forceinline keyword.

場合、コンパイラがエラーを発行、 naked属性メンバーではないメソッドの定義以外のすべてに適用されます。The compiler issues an error if the naked attribute is applied to anything other than the definition of a non-member method.


このコードで関数を定義する、 naked属性。This code defines a function with the naked attribute:

__declspec( naked ) int func( formal_parameters ) {}

または、次のようにします。Or, alternately:

#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}

Naked属性が、関数のプロローグとエピローグ シーケンスのコンパイラのコード生成の性質のみに影響します。The naked attribute affects only the nature of the compiler's code generation for the function's prolog and epilog sequences. このような関数を呼び出すために生成されるコードには影響を与えません。It does not affect the code that is generated for calling such functions. つまり、 naked属性は、関数の型の一部と見なされますしないと、関数ポインターを持つことはできません、 naked属性。Thus, the naked attribute is not considered part of the function's type, and function pointers cannot have the naked attribute. さらに、 naked属性は、データの定義に適用できません。Furthermore, the naked attribute cannot be applied to a data definition. たとえば、次のサンプル コードはエラーになります。For example, this code sample generates an error:

__declspec( naked ) int i;
// Error--naked attribute not permitted on data declarations.

Naked属性は、関数の定義のみに関連し、関数のプロトタイプでは指定できません。The naked attribute is relevant only to the definition of the function and cannot be specified in the function's prototype. たとえば、次の宣言はコンパイラ エラーになります。For example, this declaration generates a compiler error:

__declspec( naked ) int func();  // Error--naked attribute not permitted on function declarations

Microsoft 固有の仕様はここまでEND Microsoft Specific

関連項目See also

naked 関数呼び出しNaked Function Calls