【发布时间】:2017-05-29 13:04:19
【问题描述】:
我知道 volatile 关键字会阻止编译器优化变量并在读取时从内存中读取它。除了内存映射寄存器,还有哪些情况需要我们使用 volatile?给定一个符合标准的编译器,我是否必须在两种情况下都将 test_var 声明为 volatile?
1.
在file1.c中
int test_var=100;
void func1()
{
test_var++;
}
在file2.c中
extern int test_var;
void func2()
{
if(test_var==100)
{
....
}
}
2.
在file1.c中
int test_var=100;
void func1()
{
}
在file2.c中
extern int test_var;
void func2()
{
if(test_var==100)
{
....
}
}
【问题讨论】:
-
这可能在多线程应用程序中也是必需的。
-
请注意,将您的变量声明为
extern存储类,编译器在优化对该变量的读取和写入的能力方面受到限制。 -
@Jean-FrançoisFabre 这将是一个经典错误,请参阅我的答案。
-
@FelixPalmen 很好的答案顺便说一句
标签: c embedded driver volatile