2017-02-22 125 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/语言/外部)了解更多信息。 –