今天犯了一個低級的錯誤,在頭文件中定義了一個變量,而該頭文件被多個源文件調用,致使該變量重複定義。而後我就把改變量改爲static類型的了,這下編譯卻是不出錯了,就是結果跟我想象的不同,在一個文件中改了,而在另外一個文件用的時候,結果爲0.編譯器
而後發現這個錯誤好低級,正確的用法是在源文件中定義,在頭文件中聲明,而別的源文件想用,就引用該頭文件。編譯
咱們來講說定義和聲明的關係:變量
定義:指有這麼個東西,並且就放在這。引用
聲明:僅僅指有這麼個東西,它是在別的文件中定義的。static
因此定義只能一次,而聲明是能夠屢次的,在編譯器編譯的時候,只有變量定義的文件所生成的中間文件會有該變量的信息,其它聲明該變量的文件中,不會有該變量。文件
其實還遺留了一個問題,爲何在頭文件中用static修飾變量就不會報重複定義的錯誤了?錯誤
這是由於每一個包含該頭文件的源文件中都會有一個屬於它們本身的變量,注意:雖然只在頭文件中定義了一次,實際的結果是每一個包含該頭文件的源文件都會定義一個相同名字的變量,可是有多少源文件引用,就定義了多少個變量,並且每一個源文件只能訪問屬於它本身的變量(由於是static的)。生成