2012-11-23 4 views
9

C++のプレーン定数変数のデフォルトは内部リンケージです。 私は、次のしている場合としますプレーンC++の定数変数

  • を私は

  • const int var = 2)ヘッダファイルの中のconst変数を定義その後私は2つのcppファイルにヘッダーが含まれています。

私はcppのファイルの両方でその変数のconst(すなわち&var)のアドレスを取得しようとすると、これら2つのアドレスが同じになりますか?また、私はこの事実を検証するために小さな作業コードが必要です。

このスレッドでは、this answerのコメントに私が質問できなかったので、私はこれを質問として投稿しなければなりませんでした。私は初心者です。

+2

あなたはC++に興味があると思います。 Cはそのルールとはかなり違っています。だから私はCのタグを削除することをお勧めします。 –

+4

これは確かにテストに1分かかりますか? – Rook

+0

@Rook:いいえ '' a "==" a "'ここのシステムでは、実際には保証されていません。 – MSalters

答えて

5

C++の場合、内部リンケージのために同じではありません。これらは2つの異なるオブジェクトです。 Cでは、これは逆の方法であり、constは外部リンケージを持つため、再定義によってリンケージエラーが発生します。

+0

それは私が考えるものでもあります。しかし、私が言及したリンクの答えは同じであると言います。 –

+0

それはそこに言われたことではありません。注意深く読んでください - 同じグローバル変数なので、その答えの "同じ"アドレスです。 externキーワードとグローバル変数の意味についていくつか読んでおくべきです。 – SomeWittyUsername

+0

@UchiaItachiあなたはその答えを誤解しています。ヘッダーにexternとして宣言し、* .ccファイル*でそれらを定義すれば、同じアドレスを得ることができます。 –

0

変数は異なるのアドレスを持ちます。可変アドレスをどこでも参照しないと、コンパイル時やバイナリで変数の値が代入され、変数の値がまったく見つからない可能性もあります。

+0

参照されていない場合は、変数とその値は置換されていないバイナリから全く省略できます – SomeWittyUsername

2

は、これら2つのアドレスが同じになりますか?

いいえヘッダーはコンパイル時に* .cppファイルに含まれるため、ヘッダを含むすべての* .cppは独自の定数を作成します。

ただし、ヘッダーにextern const int var;を使用し、* .cppに既定値を設定した場合は、同じ値にする必要があります。

関連する問題