如果變量定義爲volatile int x
file1.c
和extern int x
in file2.c
(而不是extern volatile int x
)會發生什麼?編譯器是否有機會知道x
是易失性的,並在file2.c
中進行編譯。將volatile變量定義爲extern int
1
A
回答
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/語言/外部)瞭解更多信息。 –
相關問題
- 1. 將在「init」中定義的servlet實例變量標記爲「volatile」
- 2. 可以在java中將volatile變量定義爲static嗎?
- 3. extern變量是如何定義的?
- 4. C變量定義vs extern decleration
- 5. 如何定義extern變量和聲明?
- 6. 在main()與全局變量中定義extern變量
- 7. volatile變量的間接變化可以視爲未定義的行爲?
- 8. 我應該將共享靜態變量指定爲volatile嗎?
- 9. EXTERN變量C
- 10. 未定義的引用extern int stm32
- 11. Extern變量C++
- 12. 本地volatile變量
- 13. extern變量 - 爲什麼?
- 14. 有沒有辦法爲extern類型定義變量
- 15. 將字符串轉換爲預定義的int變量名
- 16. 爲什麼C中全局變量的存儲類被隱式定義爲「extern」?
- 17. 在函數中將volatile變量作爲常量參數傳遞
- 18. volatile&extern和有什麼不一樣?
- 19. extern和volatile之間的區別
- 20. 在定義變量時使用'extern'關鍵字
- 21. 將模板宏定義爲變量
- 22. 將常量定義爲變量
- 23. 應該將「initCount」變量聲明爲「volatile」嗎?
- 24. 使用「extern」定義的變量對庫進行後期綁定
- 25. *(volatile unsigned int *)的含義0x00 = 0x00;
- 26. 爲什麼使用'extern'聲明而不是定義創建一個變量?
- 27. 先前在cuda C++中定義的extern全局設備變量
- 28. 的extern局部變量
- 29. C++ extern變量不可見
- 30. 將變量定義爲字符串
這是標題的用途。避免執行文件中的'extern'聲明。 – Olaf
有些OT,但希望你不要依賴'volatile'來實際上對多線程程序中的C變量有用嗎?請參閱[易失性:幾乎無用於多線程編程](https://software.intel.com/zh-cn/blogs/2007/11/30/volatile-almost-useless-for-multi-threaded-programming): * ... volatile的使用完成任何事情都不會阻止編譯器進行有用和理想的優化,對於使代碼「線程安全」沒有任何幫助。* –
@AndrewHenle它適用於嵌入式系統。我不認爲這是無用的。 – i486