我們知道,在 c++(但不是在 c 語言)中,const 限定符對預設儲存型別稍有影響。在預設情況下,全域性變數的鏈結性為外部的,但 const 全域性變數的鏈結性為內部的。也就是說,在 c++ 看來,全域性 const 定義就像使用了 static 說明符一樣。
因此,可以將 const 常量定義在標頭檔案中供工程中的多個其它檔案包含引用,並且編譯時不會產生變數重複定義的錯誤。當然,也可以用 #define 巨集定義。
一般常量定義並無問題,但是,如果 const 要限定的是指標就須特別注意。這裡以字元陣列為例來說明。
[cpp]view plain
copy
#ifndef const_header_h_
#define const_header_h_
const
char
* const_string =
"wangqi"
;
// 錯誤!指標 const_string 並非 const 常量,所以該標頭檔案
// 被多個檔案包含時,會有變數重複定義的編譯錯誤。
const
char
* const
const_string =
"wangqi"
; // 正確,const_string 是指向常量的常量指標。
const
char
const_string =
"wangqi"
;
// 正確,陣列名是乙個常量指標
//const_string 是 const char [7] 型別。
char
* const
const_string =
"wangqi"
;
// 正確,const_string 是常量指標。
namespace
// 正確
namespace
// 正確
namespace
// 正確
#endif // const_header_h_
全域性變數在標頭檔案中「定義」
看著標題,定義上面加了乙個引號,這個得注意了。怎麼解釋呢,一般而言,變數只能定義在.c檔案中,宣告變數才在.h檔案中。下面就打破常規,把定義變數的語句放在.h檔案中,但是對實際而言,變數定義在標頭檔案中是表面上的。下面直接給出 有三個檔案a.h a.c main.c a.h裡面的 csharp vi...
C語言在標頭檔案定義全域性變數的技巧
在剛開始學習c語言的時候,可能很多人都聽過前輩說要少用goto,少用do while 不要在標頭檔案定義全域性變數等,但實際上每個特性都有其合適的應用場合,只要正確的使用是不會有問題的,相反還可能給 帶來好處。一般來說,我們寫程式的時候都不會定義特別多的全域性變數,這也是需要遵守的原則之一 但凡事都...
在C 中定義全域性變數時避免重複定義
問題 如何在c 中定義全域性變數時避免重複定義呢?今天遇到問題,全域性變數重定義錯誤,印象中記得要加extern,但是怎麼都不對,找資料後得到了解決方案,記之。參考文獻 解決方案 只要在定義時盡量在.cpp檔案中進行,而不要在.h 檔案中定義。定義好了之後,可以在.h檔案中利用extern關鍵字進行...