如果我调用具有 volatile 参数的函数并且未使用该参数,那么编译器是否仍必须生成该参数?
void consume( volatile int ) { }
...
consume( some_expr );
GCC 确实尊重这一点,但我不确定标准中 volatile 的措辞是否需要这一点。在我看来,GCC 正在做正确的事情——这在逻辑上是对 volatile 变量的赋值,因此不应省略(根据 c++ 标准的 1.9-8)
注意:这样做的目的是防止优化器删除代码的评估。也就是说,它强制some_expr
进行评估。它允许优化表达式,但确保它实际执行。
如果有任何差异,我已经将 C 和 C++ 添加为标签,作为我感兴趣的答案。不过我不认为会有。
回答: 我选择了第一个,因为我相信它是该标准的正确实际实现。然而,史蒂夫的哲学观点非常有趣,实际上可能意味着标准是模棱两可的。