C 将volatile int变量定义为extern int
如果变量在C 将volatile int变量定义为extern int,c,gcc,C,Gcc,如果变量在file1.c中定义为volatile int x,在file2.c中定义为extern int x(而不是extern volatile int x),会发生什么?编译器是否有机会知道x是易变的,并且在file2.c中编译,编译器只知道当前的源文件(基本上是包含所有内容的当前源文件),其他什么都不知道 如果extern变量没有使用正确的类型声明,那么您将有未定义的行为。编译器只知道当前的(基本上是包含所有内容的当前源文件),其他什么都不知道 如果未使用正确的类型声明extern变量,
file1.c
中定义为volatile int x
,在file2.c
中定义为extern int x
(而不是extern volatile int x
),会发生什么?编译器是否有机会知道x
是易变的,并且在file2.c
中编译,编译器只知道当前的源文件(基本上是包含所有内容的当前源文件),其他什么都不知道
如果
extern
变量没有使用正确的类型声明,那么您将有未定义的行为。编译器只知道当前的(基本上是包含所有内容的当前源文件),其他什么都不知道
如果未使用正确的类型声明
extern
变量,则将有未定义的行为。这就是标题的作用。避免在实现文件中使用extern
声明。这有点像OT,但希望您不依赖volatile
来实际为多线程程序中的C变量执行任何有用的操作?请参阅:…volatile的使用只能阻止编译器进行有用的、令人满意的优化,对使代码“线程安全”没有任何帮助。@AndrewHenle它适用于嵌入式系统。我不认为它是无用的。这就是标题的作用。避免在实现文件中使用extern
声明。这有点像OT,但希望您不依赖volatile
来实际为多线程程序中的C变量执行任何有用的操作?请参阅:…volatile的使用只能阻止编译器进行有用的、令人满意的优化,对使代码“线程安全”没有任何帮助。@AndrewHenle它适用于嵌入式系统。我不认为它是无用的。@i486全局变量(文件范围内的技术变量)默认具有外部链接。此外,没有初始化的声明是暂定定义,它可能是定义,也可能只是声明。阅读例如和以了解更多信息。@i486全局变量(文件范围内的技术变量)默认具有外部链接。此外,没有初始化的声明是暂定定义,它可能是定义,也可能只是声明。有关更多信息,请阅读例如和。