1. ホーム
  2. c++

[解決済み] C++ではconstは内部リンクを意味するのに、なぜCではそうしないのですか?

2023-06-15 21:04:03

質問

主題を参照。彼らは何を考えていたのでしょうか?

UPDATE: 混乱を避けるため、"static" から "internal linkage" に変更しました。

例を挙げると... あるファイルに以下のようなものを入れる。

const int var_a = 1;
int var_b = 1;

...そして、コンパイルは g++ -c test.cpp のみをエクスポートします。 var_b .

どのように解決するのですか?

私はあなたが意味すると信じています

<ブロッククオート

なぜC++でconstが内部リンクを意味するのか

確かに、名前空間スコープでconstオブジェクトを宣言すると、内部リンクがあることになりますね。

付録C ( C++11、C.1.2 ) にその根拠が示されています。

変更します。 ファイルスコープの名前が明示的に const と宣言され、明示的に extern と宣言されていない場合、内部リンクを持ちますが、C では外部リンクを持つことになります。

根拠は? C++ではconstオブジェクトはコンパイル時の値として使用できるため、この機能はプログラマに各constに明示的な初期化子を提供するよう促している。この機能により、多くのコンパイル単位に含まれるヘッダーファイルに const オブジェクトを置くことができるようになります。