我已经回答了问题@C 中 const 指针和 volatile 指针有什么区别?我理解的解释是:
const 修饰符意味着此代码不能更改变量的值,但这并不意味着不能通过此代码之外的方式更改该值。
然而,易失性表示“此数据可能会被其他人更改”,因此编译器不会对该数据做出任何假设。
这意味着这两种类型的变量都可以通过外部事件更改。
那么 const 和 volatile 在使用上的区别在哪里呢?
在 C 中,编译器优化对 const 有效吗?
volatile 和 const 在很多方面都有所不同,它们是两个截然不同的特性。
将变量声明为 const 绝不意味着“我希望在程序外部修改该变量”,我不确定您从哪里得到这个想法。如果您希望在代码外部修改 const 变量,则必须将其声明为volatile const
或者编译器可能会假设该变量从未更改。
默认情况下,普通 const 变量就像任何类型的变量一样,它们根本无法由程序本身修改。
就像普通变量一样,const 变量的行为在很大程度上取决于它们声明的范围。大多数情况下,它们是在文件范围内声明的,然后它们的行为就像具有静态存储持续时间的其他变量一样,只不过它们(可能)保存在内存的不同部分。如果它们在本地范围内声明,则当调用它们所在的函数时,它们可能会不时发生变化。
因此,在很多情况下 const 变量都可以被优化。一种常见的优化是“字符串池”,编译器检查相同的常量字符串文字是否在代码中出现两次,然后为它们使用相同的地址。如果您期望从外部源更改此类字符串,但没有将它们声明为易失性,那么您会遇到奇怪的错误。
至于 volatile 变量,它们可能会被外部源修改,但也可能会被程序修改,这与 const 变量不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)