Naked 関数
Microsoft 固有の仕様 →
naked のストレージ クラス属性は C 言語に固有の Microsoft 拡張機能です。naked のストレージ クラス属性を指定して宣言した関数にコンパイラにはプロローグとエピローグ コードを記述せずにコードが生成されます。インライン アセンブラー コードを使用して独自のプロローグとエピローグ コード シーケンスを作成するためにこの機能を使用できます。生の関数は特に便利な作成をサポートする仮想デバイス ドライバーです。
naked の属性が関数定義だけに関連する型修飾子ではないため生の関数は 拡張ストレージ クラス属性 で説明されている拡張属性構文を使用します。
次の例では naked の属性で定義したものです :
__declspec( naked ) int func( formal_parameters )
{
/* Function body */
}
または代わりに :
#define Naked __declspec( naked )
Naked int func( formal_parameters )
{
/* Function body */
}
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 固有の仕様→を終了