2

私はexternキーワードに精通しており、他のファイルに存在する変数を宣言するために使用されますが、次のステートメントはどういう意味ですか?

extern "C" const IMAGE_DOS_HEADER __ImageBase;
4

2 に答える 2

5

これは、__ImageBaseグローバル変数がCリンケージを使用し、その名前がC ++ではなくCのルールを使用してマングルされる必要があることを意味します。

編集:レイモンド・チェンが最近、私の元の答えが明らかに間違っていたことを示す記事を公開したのは偶然です。名前マングリングを無効extern "C"にせず、それを実行するために使用されるルールを変更するだけです。Cの名前も壊すことができます。

于 2012-05-22T18:05:51.677 に答える
1

__ImageBaseこれは、に続くシンボル名をマングルしないことを意味しますextern "C"。つまり、C++コードで変数を使用できるようになります。

extern "C"適用するリンケージを指定します。要するに、リンケージ仕様。
これは、C ++コンパイラに、Cのタイプのリンケージを後続のシンボルに適用するように指示します。

良い読み物:
externを使用したリンケージの指定
CとC++の混合方法

于 2012-05-22T18:05:44.480 に答える