2012-03-25 8 views
5

私は多くの小さな単位のインライン関数をヘッダファイルに入れました。これは多くのコンパイル単位に含まれています。 コンパイラによってコードが正しくインライン展開され、プログラムは魅力的に機能します。ヘッダがインライン関数でいっぱいで、ヘッダファイルの外にコードを移動してインラインのすべてをインライン化できますか?

が、今のヘッダファイルは、私がこのような何かを考え、それを読みやすくするために(ヘッダファイルであるために)非常に珍しい何か、 です:

#ifndef MY_HEADER_H 
#define MU_HEADER_H 

static inline 
void my_fnct (my_param a); 

#include "my_header.inline.c" 

#endif 

とファイルmy_header.inline.cは次のようになります。

static inline 
void my_fnct (my_param a) 
{ 
    // .. my code .. 
} 

これらの機能を使用するには、ヘッダーファイルを含めるだけです。

私の質問は:ヘッダーファイルをあまりにも多くのコードで埋めることなくこれを達成するより良い方法がありますか? または私はこれを行うことができ、他の開発者が問題なくこのコードを理解することを期待していますか?

+1

ヘッダーにインライン関数があると、もう一度問題がありますか?インライン関数は非常に短く、1ライナーでなければなりません。 – littleadv

+1

コードのパフォーマンスに関しては、重要なことがどのように見えるかは唯一のものです。すべてのものが含まれているあなたのコンパイラの減速は何ですか?私の経験では、現代のコンパイラではこのようなことはごくわずかです。また、何百もの設定オプションを混在させるという手間がかかりません。 –

答えて

1

できません。ただし、GCCのリンク時間最適化機能を使用することもできます(関数が宣言されていない場合でも、コンパイル単位ごとにヘッダーには使用できません)。 をコンパイルし、gcc -fltoにリンクします(これには、最新のGCCコンパイラが必要です(たとえば、少なくとも4.6など)。ビルド時間が遅くなります。

1

私が個人的に好きではない練習は、インライン関数を.inl拡張子を持つ別のファイルに抽出することです。これはただのコンベンションであり、好きなようにファイルに名前を付けることができます。私は別のファイルを持っているのではなく、見たくないものを隠すことができるように、コードをフォールドするIDEを持っています。

関連する問題