我看过 How many usage does "volatile" keyword have in C++ function, from grammar perspective?关于在函数上使用 volatile 关键字,但没有明确解释该问题中案例 1 的作用。只有一位受访者表示这似乎毫无意义/无用。
但是我不能完全接受这个说法,因为 GNUC 的 AES 软件实现已经使用了很多年,并且它们有很多这样的功能:
INLINE volatile void functionname( /* ... */ ) {
/* ... */
asm( /* ... */ ) // embedded assembly statements
/* ... */
}
这种用法一定是有原因的。任何人都可以:
一个。告诉我最初的原因是什么;和
B。现在如何达到预期的效果?
我正在使用 Ubuntu 和 GCC 4.6.3。
注意:我最接近的解释是在 GCC 2.5 之前,您可以通过以下方式欺骗在 2.5 中实现的“noreturn”属性:
void fatal( /* ... */ ) { /* ... */ exit(1); }
typedef void voidfn ();
volatile voidfn fatal;
这将允许编译器识别“fatal”不会返回。
但这种情况似乎不适用于 AES 代码。我已经有很长时间没有在装配中做过任何事情了,但我想我会认出跳跃或类似的事情。
最佳答案
根据gcc documentation (until February 2015) , volatile void
在 C 中作为函数返回值(但在 C++ 中不是)等同于函数上的 __attribute__((noreturn))
并告诉编译器函数永远不会返回。
关于c - —"volatile void function( ... )"是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14288603/