avr-libc(void)__ s在宏的末尾

时间:2015-01-18 08:08:30

标签: c gcc avr-gcc

我目前正试图弄清楚avr-libc /util/atomic.h如何实现其魔力。到目前为止,我理解使用__cleanup__属性来实现RIAA。我也明白巧妙地使用for循环来创建一个"块参数"。我不明白的是以下函数末尾的(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;
}

这些功能的最后一行是什么?

1 个答案:

答案 0 :(得分:1)

这些函数不使用它们的参数,所以这个参数的使用是为了消除“unused parameters”编译器警告。

包括对(void)的强制转换,因为没有它,大多数编译器会发出另一个警告,例如“表达结果未使用”(如果我没记错的话,就是GCC的情况)。