質問: 0; と書かれたファイルを、それぞれ別のcppで インクルードした場合について、 変数領域の確保がどうなっているか?、 マクロと同等のものとして扱われるか?、 といった点についてご存知でしたら、ご教示頂けないでしょうか? お手数をおかけいたしますがどうぞよろしくお願い致します。
回答: こんにちは。 C++でconstつけたら、内部リンケージになることは知りませんでした。constだけでは外部リンケージなので、通常はstaticも付けないといけないと思ってました。 調べてみたら、内部結合と外部結合にて、C++はconstだけで内部リンケージになり、Cはstaticもつけないと内部リンケージにならないそうです。びっくり。 > > 内部結合なので、a.cppとb.cppのそれぞれの中で、別々に、変数の領域が確保されるような気がしました。 > > > 文法上はその通りと思います。同じ値がコード領域に定義された場合、最適化して1つにしてしまうようなリンカもあるようです。(確認したことはないですが。) > > マクロと同等のものとして扱われるか?、 > > > これは異なります。マクロはプリプロセッサが文字列的に置き換えてしまうため、objファイル内のシンポル・テーブルへ出力されません。その結果、IDE等でポイントしても置き換え前の文字列が表示されることはないです。 しかし、constで宣言した場合は、シンポル・テーブルへ出力されIDEにて表示されます。