从语法的角度来看,我已经看到“volatile”关键字在 C++ 函数中有多少用法?关于在函数上使用 volatile 关键字,但没有明确解释该问题中的案例 1 做了什么。只有一位受访者表示这似乎毫无意义/无用。
然而我不能完全接受这种说法,因为 GNUC 的 AES 软件实现已经使用了多年,并且它们具有许多如下功能:
INLINE volatile void functionname( /* ... */ ) {
/* ... */
asm( /* ... */ ) // embedded assembly statements
/* ... */
}
这种用法一定是有原因的。任何人都可以:
一个。告诉我原来的原因是什么;和
乙。现在如何达到预期的效果?
我正在使用 Ubuntu 和 GCC 4.6.3。
注意: 我最接近的解释是在 GCC 2.5 之前,您可以通过以下方式欺骗在 2.5 中实现的“noreturn”属性:
void fatal( /* ... */ ) { /* ... */ exit(1); }
typedef void voidfn ();
volatile voidfn fatal;
这将允许编译器识别“致命”不会返回。
但这种情况似乎不适用于 AES 代码。我已经很久没有在装配中做任何事情了,但我想我会认出跳跃或类似的东西。