2017-06-10 7 views
0

は持っている、それは無意味です:extern "C"を定義しているファイルで使用しますか?

#ifdef __cplusplus 
    extern "C" { 
#endif 

// code... 

#ifdef __cplusplus 
    } 
#endif 

「コード...」(なしは、などが含まれる)を定義し、型定義のちょうど束でありますか?

+0

CとC++が引き続き有効ですが、言語間の移植性のために低コストで便利です。 – chux

答えて

1

ヘッダーの使用方法によって異なります。

タイプと値が有効で、CとC++の両方で同じ意味を持ち、Cでコンパイルされたコンパイル単位やC++でコンパイルされたコンパイル単位で使用する場合は、extern "C"を使用する必要があります。 C++。それ以外の場合、C++コードとCコードは相互運用できません。

コンパイル単位でヘッダファイルがインクルードされている場合は、C++のようにC言語でビルドされることはありますが、どちらにもなることはありません。extern "C"は必要ありません。また、選択した言語に固有の機能を使用することもできます。

+0

ありがとう、ありがとうございます。私はextern "C"を除外することに決めました。これは単にtypedefがunsigned charであり、その定義がちょうど16進の整数値であるためです。 – slothh

+1

あなたのニーズに応じて、 '#define'ではなく' const'sを使うことをお勧めします。合理的な品質のコンパイラを前提とした 'const'の利点は、マクロを使う利点を上回る傾向があります。詳細については、https://stackoverflow.com/questions/6442328/what-is-the-difference-between-define-and-constとリンクされた重複を参照してください。 – Peter

2

原則として、特定のケース(変数または関数の宣言なし)では、extern "C"は無意味です。

実際には、コードを読みやすく(C++フレンドリなインターフェイスを定義する意図を示している)、脆弱ではありません。いくつかの開発者(おそらくあなた)は、数ヶ月以内に他の宣言をその中に追加するかもしれません。

+0

返信いただきありがとうございます。しかし、私はチームとして働いていない、私は趣味としてこれを行うグレード9の学校の学生です。私はチームで働くことを愛するだろうが、私の学校のプログラムでは他に誰もいません。 – slothh

+0

しかし、あなたが一人であっても、数ヶ月で理解できるコードを書く必要があります。 –

+0

良い点、コードを完全にコメントし、すべてのヘッダーファイルにextern "C"を追加することにしました。私はgithubにもレポを付けるつもりです。 – slothh

関連する問題