2011-10-29 13 views
7

__declspec(naked)と同等のものはgcc/g ++になりますか? __declspec(naked)は実際にはエピローグとプロローグなしで関数を宣言するために使用されます。gcc/g ++の__declspec(naked)に相当する

+5

http://gynvael.coldwind.pl/?id=15 – SigTerm

+0

@SigTerm私はそのリンクを投稿しようとしていました。それはすっきりしたハックです。 – AusCBloke

答えて

0

最近のGCCでは、Linuxの下でこのようなことはないと思います。コンパイラは必要に応じてプロローグとエピローグを発行します。それは、プロローグまたはエピローグを非常に小さくすること、または存在しないことさえすることを非常によくするかもしれない。

アセンブリで関数をコーディングすることができます。あるいは、関数内にasm文を置くこともできます。

あなたはなぜそれをしたいのか分からなかった。あなたの目標は何ですか、そしてなぜあなたは正確に尋ねていますか?

+0

あなたは間違っています、私は一度このようなことをしていましたが、今覚えていません。 – MetallicPriest

+3

GCCでやったことはありますか? SigTermが参照しているページは、私が言ったことに従っています.GCCとLinux(x86またはAMD64ターゲットマシン)でプロローグやエピローグを使用したくない場合は、asmを使用してください。 –

+0

実際には、(エンベデッド)アーキテクチャの場合にのみ、コメントにあなた自身を含めるように、存在します。 – ninjalj

7

一部のアーキテクチャでは、gccは "naked"という属性をサポートしています。最新のgcc docs私はこのアーキテクチャのリストを提供しています:ARM、AVR、MCORE、RX、SPUあなたがそれらのアーキテクチャの1(あなたがそれを使用しようとgccはあなたに警告を与えるだろうし、それがサポートされていません)を使用している場合

、属性は次のように使用することができます:

__attribute__ ((naked)) int fun() 
{ 
} 

[最近、gccの開発者のリストで、より一般的な機能として "裸の"属性を追加し、それをより多くのアーキテクチャでサポートしようとする議論がありましたが、明らかにそれはあなたを助けません:)]