2011-12-16 19 views
2

CとC++コードの両方を含む.cppソースファイルがあります。 g ++を使ってCコードをコンパイルしないので、gccを使う必要があります。gccルールを使用してg ++をコンパイルする

extern "C" {}を使用すると、関数名の処理方法をコンパイラに伝えるだけなので、g ++がコードの一部分に対してgccのように振る舞い、g ++のように振る舞います。

私はそれらを別々のファイルに置くことができますが、それから他のC++ファイルで使用できるようにCコードでファイルのヘッダーを作成する必要があります。避けるために。私はそれらの関数をそのC++コード以外の誰にでも見せたくありません。

それは意味がありますか?これも可能ですか?ありがとう!

答えて

5

ファイルを別々のファイルに入れ、関数をC++でファイルに宣言します。ヘッダーを作成する必要はありません。

C++コード(blah.cpp):

// C function declarations 
extern "C" { 
    int foo(int x); 
    int bar(int x); 
} 

// C++ function definitions 
int qux(int x) { 
    return foo(bar(x)); 
} 

Cコード(blah.c):

// C function definitions 
int foo(int x) { 
    return x * 3; 
} 
int bar(int x) { 
    return x * 2; 
} 
+0

うん、それは動作します。それが私が今やっていることです。しかし、多くの関数と構造体の宣言があります - 私はコピーを貼り付けるのを避けようとしていました。 #pragmaや何かのような魔法のものがあるのだろうかと思っていた。 – mpcoder

1

きちんと考えですが、私はG ++のための任意の規定を作るとは思いませんこの。たぶんg ++フラグを使うだけで、受け入れるものについてもう少し受け入れやすくすると同時に、途中で会うまでCコードをやや修正することができます。

1

同じソースの2つのコピーを作成します.1つはg ++で、もう1つはgccでコンパイルします。

#ifdef __cplusplus 
#if 0 
... 
#endif 
#endif 

でC++パーツをブロックし、gccがC++コードをコンパイルしようとしないようにします。

g ++ブロックにextern "C" {}を追加して、Cの関数プロトタイプを知るようにします。これを行うにはヘッダーは必要ありません。ソースファイルに書き込むことができます。

別々にコンパイルしてリンクしてください。

+1

それはコードが決してコンパイルされない原因になりますか?コードは '#if 0'と'#endif'の間にあります。 – mpcoder

関連する問題