2017-02-11 30 views
0

據說,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!

+0

的[我如何使用的extern共享變量betwe可能的複製en源文件在C?](http://stackoverflow.com/questions/1433204/how-do-i-use-extern-to-share-variables-between-source-files-in-c) – LogicStuff

+0

你需要指定**您的編譯器和您的編譯命令**。否則,行爲不可靠地重現。 –

+0

投票結束,因爲缺乏可重複的示例(請參閱上面的評論)。 –

回答

2

這是因爲包含在s1.cpph1.h,因此(關於你的問題),你有這樣的:

extern const int a; 
const int a = 9; 

這意味着a被聲明爲有外部鏈接,然後被定義,在這裏初始化,因此a因此其他模塊s2.cpp只包括h1.h可見:

extern const int a; 
+0

那麼在那種情況下,你認爲會使我預先關鍵字extern沒有它,它會拋出錯誤? – anurag86

相關問題