2

C++ FAQ Liteのセクション 32: C と C++ を混在させる方法を読んでいました。ヘッダー ファイルに追加することを強く検討する必要があると書かれています (もちろん、適切なプリプロセッサ ディレクティブを追加しますextern "C" {...}。そうすれば、C++ ソース ファイルに「extern "C" ナンセンスなしで」ヘッダーを含めることができます。

// Get declaration for f(int i, char c, float x)
#include "my-C-code.h"

「ナンセンス」で、それほど簡単ではない代替案は次のようです。

extern "C" {
  // Get declaration for f(int i, char c, float x)
  #include "my-C-code.h"
}

最初のオプションが好まれるのはなぜですか? それは単なるスタイルの問題ですか (そして、誰かがそれらを含めるときに入力する文字数)?

4

4 に答える 4

3

はい、それは単なるスタイルのものです。しかし、それはあなたのライブラリを使用するときに人々の生活を楽にするので、おそらく固執する価値があります。

于 2013-01-10T19:36:47.087 に答える
3

ステートメントをヘッダーファイルに一度入れるか、それを使用するすべての人がヘッダーファイルを含むすべての場所にステートメントを置くことができます。前者は確かに私にはより良いスタイルのように思えます。

于 2013-01-10T19:39:23.840 に答える
2

これにより、マクロ"__cplusplus"が定義されるため、C++ コードでその C ヘッダー ファイルを使用できるようになります。ただし、マクロが定義されていない従来の C コードでも引き続き使用できるため、一意の C++ 構造は表示されません。

#ifdef __cplusplus
extern "C" {
#endif

// all of your legacy C code here

#ifdef __cplusplus
}
#endif

別の方法として、 を使用する#includeこともできますが、C ヘッダー ファイルで行う場合は、1 回だけで済みます。また、下位互換性があります。

于 2013-01-10T19:46:37.713 に答える
0

ライブラリを含めないと、ライブラリを使おうとする人々にとっては苦痛です。それなしでC++アプリケーションからCヘッダーを使用すると、ユーザーはコンパイラーまたはリンカーのエラーを受け取ります。これは、問題に精通していない人にとっては特に混乱を招く可能性があります。

于 2013-01-10T19:39:42.943 に答える