2017-02-22 124 views
1

如果變量定義爲volatile int xfile1.cextern int x in file2.c(而不是extern volatile int x)會發生什麼?編譯器是否有機會知道x是易失性的,並在file2.c中進行編譯。將volatile變量定義爲extern int

+1

這是標題的用途。避免執行文件中的'extern'聲明。 – Olaf

+0

有些OT,但希望你不要依賴'volatile'來實際上對多線程程序中的C變量有用嗎?請參閱[易失性:幾乎無用於多線程編程](https://software.intel.com/zh-cn/blogs/2007/11/30/volatile-almost-useless-for-multi-threaded-programming): * ... volatile的使用完成任何事情都不會阻止編譯器進行有用和理想的優化,對於使代碼「線程安全」沒有任何幫助。* –

+0

@AndrewHenle它適用於嵌入式系統。我不認爲這是無用的。 – i486

回答

8

編譯器只知道當前的translation unit(基本上所有包含的當前源文件),沒有別的。

如果一個extern變量沒有使用正確的類型聲明,那麼你將會有未定義的行爲。

+0

@ i486默認情況下,全局變量(*文件範圍*中的技術變量)具有* external linkage *。另外,沒有初始化的聲明是* tentative *定義,它*可能是一個定義或者只是一個聲明。閱讀例如[此鏈接參考](http://en.cppreference.com/w/c/language/storage_duration#Linkage)和[此外部和暫定義參考](http://en.cppreference.com/w/c/語言/外部)瞭解更多信息。 –