我目前正试图弄清楚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;
}
这些功能的最后一行是什么?
答案 0 :(得分:1)
这些函数不使用它们的参数,所以这个参数的使用是为了消除“unused parameters”编译器警告。
包括对(void)
的强制转换,因为没有它,大多数编译器会发出另一个警告,例如“表达结果未使用”(如果我没记错的话,就是GCC的情况)。