C プログラムで使用する C++ 共有ライブラリを作成しています。しかし、 と について質問がextern
ありextern "C"
ます。
次のコードを検討してください
私のヘッダーファイルは次のようなものです:
#ifdef __cplusplus
extern "C" int global;
extern "C" int addnumbers(int a, int b);
#else
extern int global;
#endif
これは問題なく動作します。宣言するしかない
int global;
私の.cppまたは私の.cファイルのいずれかで。ただし、私が理解していないのは次のとおりです。
extern "C"
とここはどう違いextern
ますか?コメントアウトしてみましたがextern "C" int global
、うまくいきました!なんで?
私はそれextern "C"
がCリンケージを作るために使われていることを知っています。それが私が持っている理由ですextern "C" int addnumbers(int,int)
。つまり、C プログラムで使用する C++ 関数を書きたい場合は、extern "C"
. さて、グローバル変数についてはどうですか - ここでは状況が違うと思いますか? C プログラムで という名前の C++ 変数を使用したいのですが、global
使用できextern
ませんextern "C"
。何故ですか?これは私には直感的ではありません。
コメント: 変数と関数に使用する場合の違いを尋ねているので、これは重複しているとは思いません。