我目前正在尝试弄清楚 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/