2011-07-17 14 views
0

ヘッダファイルの内容をいくつかのクラスにコピーして貼り付ける必要があります。理由は - インクルードディレクティブを使用しても、外部コンパイラで使用できるファイルの参照が作成されないため、私の唯一の選択肢は、ヘッダーの内容をクラスにコピーすることでした。インラインでヘッダコンテンツを挿入する

これを達成するために、* inlineのディレクティブを使用できるかどうか疑問に思っていました。

私自身のプリプロセッサを作成してそのように振る舞う最良の方法は何ですか?

+0

あなたはどんな外部コンパイラについて話していますか? –

+0

@ John ZwinckこれはODBコンパイラです – Bitmap

+0

このC++ ORMの事は? http://www.codesynthesis.com/products/odb/doc/odb.xhtml ... '-I'オプションを使ってインクルードファイルの場所を教えても何がうまくいかないのですか? –

答えて

1

外部コンパイラは、コンパイル時にインクルードファイルを展開しない可能性が最も高い原因はインクルード検索パスを設定できないことですが、特定の質問に対処するとgccコンパイラを使用してインクルードファイルをすべて展開することができます-Eオプション

ので、

gcc -E mycfile.c >myexpeandedcfile.c 

は私が正しくあなたの問題を理解すると仮定すると動作するはずです。

+0

これはインクルードファイルを展開するので、これはODBとは何の関係もないことを確認する必要があります。あなたの答えは私が期待したものです。ありがとう。 – Bitmap

1

#includeと同等の処理を行うには、独自のプリプロセッサツールを作成する必要があります。

+0

実際のタスクが、選択されたものだけでなくすべての#includeを完全に解決することであれば、実際のCプリプロセッサを使うことができます。私はそれがあなたが言うようなものかもしれないと思う。 –

3

m4マクロ言語の使用はどうですか?インストールGNU m4を持つLinuxシステム上で、info m4をしようとすると、例えば、

m4は、汎用のマクロ処理言語です。特にGNU Autotoolsで頻繁に使用されています。いくつかのm4マクロを定義して、コンパイル前にm4で実行することでコードを事前処理することができます。

1

バイナリをコンパイルするためにどのコンパイラを使用しているかによって異なります。コンパイラの中には、プログラムのインライン展開に影響する最適化フラグを提供するものがあります。 gccとg ++では、最適化フラグ-finline-functionsは "単純"とみなされる関数のインライン展開を強制します。コンパイラはヒューリスティックセットを使用して関数のシンプルさを判断するので、コードに応じて機能する場合もあれば機能しない場合もあります。 -finline-functionフラグも最適化レベル3で設定され、gccおよびg ++でフラグ-O3を指定して有効にします。

少し調整してコードにインラインディレクティブを追加すれば、完全なインライン化を達成するためにいくつかのコンパイラフラグを設定できるはずです。

関連する問題