如果我将一个变量声明为volatile并且在程序中没有使用它,编译器会优化该变量吗?
如果是局部的或全局的volatile变量声明呢?
谢谢。
如果我将一个变量声明为volatile并且在程序中没有使用它,编译器会优化该变量吗?
如果是局部的或全局的volatile变量声明呢?
谢谢。
volatile
变量声明(但编译器无法消除未使用的全局变量定义-它必须假定某些其他翻译单元(TU)将引用它)。volatile
限定符控制(影响)编译器生成访问变量的代码方式-如果代码不访问变量,则没有必要更改它生成的代码,除非避免生成对变量的引用。它可能不存在。static volatile
并且在源代码中未被引用,它可以被消除吗?volatile
限定符,都适用。for
循环进行延迟的情况下,循环计数器(通常用于嵌入式系统)必须声明为volatile
。例如,在volatile int i; for (i=100; i>=0; --i) {}
中。该for
循环没有逻辑意义,但不能被优化掉。如果不是由于volatile
关键字,优化器将会这样做。(但它是一个被使用的变量)。 - Gauthiervolatile与存储分配无关——如果编译器在没有volatile关键字的情况下消除了未使用的变量,那么在有volatile关键字的情况下也可以并且很可能会被消除。如果你想确定,请检查生成的代码或符号表。
volatile
会影响编译器输出呢? (注:已翻译为简洁易懂的中文,不包含额外解释或内容。) - pascal