據說,const變量要從外部引用(即有外部鏈接),extern
關鍵字是強制性的。所以:跳過外部爲const全球仍然工作正常
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(紅帽4.4.6-4)(GCC)
編譯爲: 克++ s1.cpp s2.cpp -o出
輸出爲: 9在其中:9indlin1738!
的[我如何使用的extern共享變量betwe可能的複製en源文件在C?](http://stackoverflow.com/questions/1433204/how-do-i-use-extern-to-share-variables-between-source-files-in-c) – LogicStuff
你需要指定**您的編譯器和您的編譯命令**。否則,行爲不可靠地重現。 –
投票結束,因爲缺乏可重複的示例(請參閱上面的評論)。 –