c 在標頭檔案中定義全域性變數時需要注意的地方

2021-07-10 13:01:05 字數 1094 閱讀 5525

我們知道,在 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關鍵字進行...