c - 引用另一个 C 源文件中声明的 volatile 变量时是否需要 extern 关键字?

标签 c volatile extern

我有两个 C 源代码文件;一个文件包含如下声明:

volatile unsigned char flag=0; 

另一个 C 文件包含一个引用,例如:

extern unsigned char flag; 

这是正确且安全的吗?还是应该在引用变量时重复使用 volatile 关键字?即

extern volatile unsigned char flag; 

最佳答案

不,这是不正确的。

同一变量的所有声明都需要使用完全相同的类型,volatile 是类型的一部分(extern 不是)

检查 extern 声明的一个好习惯是将它们放在一个头文件中,该头文件也包含在定义所在的编译单元中。然后编译器将检查它们的正确性。

Notice what happens if you do that on this example .

prog.c:2:22: error: conflicting type qualifiers for ‘flag’
 extern unsigned char flag; 
                      ^
prog.c:1:24: note: previous definition of ‘flag’ was here
 volatile unsigned char flag=0;

关于c - 引用另一个 C 源文件中声明的 volatile 变量时是否需要 extern 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813383/

相关文章:

c - 从 C 中的 FFT 阵列中删除 1000Hz 音调

c - Linux Kernel中读写原子操作的实现

c++ - 命名空间内全局变量的外部局部变量

c# - extern 在 C# 中如何工作?

c++ - 静态库中带有外部模板的 undefined symbol

ios - 如何创建带有 C 函数的文件并从我的应用程序访问它们?

将具有不同指针类型的函数指针转换为参数

excel - 如何在 MS Excel VBA 中强制更新函数 (UDF)

java - 更新对象缓存 HashMap 的最佳实践

c - 为什么这个循环在第一次转换后会产生错误?