如果变量定义为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. 可以在java中将volatile变量定义为static吗?
- 2. 将在“init”中定义的servlet实例变量标记为“volatile”
- 3. volatile变量的间接变化可以视为未定义的行为?
- 4. 我应该将共享静态变量指定为volatile吗?
- 5. EXTERN变量C
- 6. 未定义的引用extern int stm32
- 7. Extern变量C++
- 8. extern变量 - 为什么?
- 9. 将字符串转换为预定义的int变量名
- 10. 为什么C中全局变量的存储类被隐式定义为“extern”?
- 11. 在函数中将volatile变量作为常量参数传递
- 12. volatile&extern和有什么不一样?
- 13. 在定义变量时使用'extern'关键字
- 14. 将模板宏定义为变量
- 15. 将常量定义为变量
- 16. 应该将“initCount”变量声明为“volatile”吗?
- 17. 使用“extern”定义的变量对库进行后期绑定
- 18. *(volatile unsigned int *)的含义0x00 = 0x00;
- 19. 为什么使用'extern'声明而不是定义创建一个变量?
- 20. 先前在cuda C++中定义的extern全局设备变量
- 21. 运作volatile变量VS实例变量
- 22. 当(const)变量的范围没有被定义为extern或static时
- 23. extern变量的问题
- 24. 通过`extern`变量访问.text段会导致未定义的行为?
- 25. Extern和全局变量
- 26. volatile变量和订购
- 27. C中的volatile变量
- 28. Java volatile变量,多线程
- 29. 使用header中定义的变量而不使用extern C++
- 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