c - 宏末尾的 avr-libc (void)__s

标签 c gcc avr-gcc

我目前正在尝试弄清楚 avr-libc 的 /util/atomic.h 是如何工作的实现它的魔力。到目前为止,我了解了使用 __cleanup__ 属性来实现 RIAA。我还理解了巧妙地使用 for 循环来创建“ block 参数”。我不明白的是以下函数末尾的 (void)__s; 行。

static __inline__ void __iSeiParam(const uint8_t *__s)
{
    sei();
    __asm__ volatile ("" ::: "memory");
    (void)__s;
}

static __inline__ void __iCliParam(const uint8_t *__s)
{
    cli();
    __asm__ volatile ("" ::: "memory");
    (void)__s;
}

这些函数的最后一行是做什么用的?

最佳答案

这些函数不会以其他方式使用它们的参数,因此使用参数是为了消除“未使用的参数”编译器警告。

包含对 (void) 的转换,因为如果没有它,大多数编译器会发出另一个警告,类似于“表达式结果未使用”(如果我没记错的话,在 GCC 的情况下)。

关于c - 宏末尾的 avr-libc (void)__s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28008237/

相关文章:

linux - 在 64 位 Debian wheezy 多架构主机上编译使用 ssl 的 32 位二进制文​​件

c++ - 没有对具有 const 参数的模板函数的匹配函数调用

parsing - 编写一个可在 8 位嵌入式系统上使用的解析器,例如 Flex/Bison

c - 将字符存储在 EEPROM 中并回显

c - 内联汇编 block 中的临时寄存器

C编程,谁能解释一下?

c++ - O(N) 中的锦标赛获胜者和 O(NLogN) 中的玩家排名

c - 我的指针没有返回 NULL,但它所困扰的文件不存在

c - 压缩结构位域与#define'd 位掩码

c - 为什么这个程序没有段错误?