c - —"volatile void function( ... )"是做什么的?

标签 c function aes volatile void

我看过 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/

相关文章:

android - 如何在 iphone 中使用 PKCS5padding 和 AES128

Java JNI : Passing multibyte characters from java to c

c++ - 奇怪的图案 : all functions/methods return error-code using the same type in C++

c - 将文本文件中的整数存储到整数数组中

c - 从#define 函数返回一个字符串

function - matlab中的求和函数句柄

ruby - 加密空字符串

c++ - 按住滚动条卡住 win32 控制台应用程序

c++ - 使用宏获取函数参数 'name'

java - Java 和 Objective C 中的 AES128 CBC 加密提供不同的输出