const変数が外部から参照される(つまり、外部リンケージを持つ)ためには、extern
キーワードは必須です。それが正しい場合constグローバルのexternをスキップしても正常に動作する
const int f = 3; // Definition of f with internal linkage (due to const)
extern const int g; // Declaration of g with external linkage
は、その後、次のことがまだ正常に動作しない方法::だからs1.cppで を私は宣言しextern
なしconst int a=9
を初期化しています
s1.cpp
#include<iostream>
#include"h1.h"
using namespace std;
//This is a global variable
const int a=9; // No Extern here
int main()
{
cout<<a;
something();
return 0;
}
h1.h
#ifndef H1_H
#define H1_H
extern const int a; //this extern is anyways required
void something();
#endif
ただし、ここではs2.cpp icですまだアクセスa
問題なし。
s2.cpp
#include<iostream>
#include"h1.h"
using namespace std;
void something()
{
cout<<"Inside something its : "<<a; //No problem here. Why?
}
誰かが明確にしてくださいことはできますか?
私はLinuxの gccのバージョン4.4.6 20120305(Red Hatの4.4.6-4)(GCC)としてコンパイル
上でそれを実行しました:
アウト G ++ s1.cpp s2.cpp -o出力形式: 9Inside something its:9indlin1738!
可能な重複enのソースファイルをC?](http://stackoverflow.com/questions/1433204/how-do-i-use-extern-to-share-variables-between-source-files-in-c) – LogicStuff
する必要があります**あなたのコンパイラとあなたのビルドコマンド**を指定してください。さもなければ、その挙動は確実に再現可能ではない。 –
再現可能な例がないと投票する(上記のコメントを参照)。 –