C语言中的volatile const int是什么意思?

5

我正在阅读一本关于C语言的书籍,其中提到了一个我不理解的概念。

据我的了解,编译器有时会通过删除某些在表达式中看起来没有影响的变量来优化代码。因此,如果我们将一个变量声明为volatile,编译器就不会从任何表达式中删除这个变量。

所以这本书介绍了这样一个概念:

volatile const int a = 1;

这个解释只有几行,但是对我来说一点也不清楚。有人能解释一下为什么需要这样一个变量吗?

PS: 我理解 volatile 的概念,但我不理解 volatile const 的概念。


这个问题有一个完整的Wikipedia文章来解释。 - Slate
这个问题已经在https://dev59.com/Q2455IYBdhLWcg3wAvNI中得到了回答。 - disrvptor
还有这个:https://dev59.com/5m025IYBdhLWcg3wvIq2 - notbad
2
我理解volatile的概念,我想问的是volatile const。 - Cool_Coder
@unwind,抱歉,这是SO自动选择了一个我没有发布的问题的标题。 - Cool_Coder
@notbad 您链接的问题没有讨论 volatile const 类型,而只是 volatile 类型。 - chux - Reinstate Monica
2个回答

5

volatile const变量是一种其值可能会因外部影响而改变,且不可被写入的变量。


首先感谢您理解我的问题。但是,如果变量的值在改变,那么它怎么可能是常量(const)呢? - Cool_Coder
3
const 表示你不能对其进行写操作,但这并不意味着该值永远不会改变;变量可能映射到从传感器读取值的硬件寄存器等内容。这就是 volatile 起作用的地方。 - Graham Borland
3
此外,它可以通过const-cast进行更改,或者在没有声明为const的另一个函数/线程中进行更改(这是相当常见的方法)。 - keltar
1
@keltar:C标准没有定义如果试图修改一个被定义为const的对象的行为。如果代码有一个指向const类型的指针,但是该指针指向的对象最初并非定义为const,则允许将指针转换为指向非const的指针,并通过新指针修改对象。 - Eric Postpischil
@EricPostpischil 我更多地是在谈论extern。但是,那个东西也是。 - keltar

1

易变的const表示值不能通过编程方式更改,但可以通过间接方式更改,例如,如果变量被映射到设备寄存器,则设备可以修改其值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接