avr-libc (void)__s 在一个宏的结尾
avr-libc (void)__s at the end of a macro
我目前正在尝试弄清楚 avr-libc 的 /util/atomic.h 是如何发挥其魔力的。到目前为止,我了解了使用 __cleanup__
属性来实现 RIAA。我还理解了巧妙地使用 for 循环来创建 "block parameter"。我不明白的是以下函数末尾的 (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;
}
这些函数的最后一行是做什么用的?
这些函数不使用它们的参数,所以使用参数是为了消除 "unused parameter" 编译器警告。
包括对 (void)
的转换,因为如果没有它,大多数编译器会发出另一个警告,类似于 "expression result unused"(如果我没记错的话,在 GCC 的情况下)。
我目前正在尝试弄清楚 avr-libc 的 /util/atomic.h 是如何发挥其魔力的。到目前为止,我了解了使用 __cleanup__
属性来实现 RIAA。我还理解了巧妙地使用 for 循环来创建 "block parameter"。我不明白的是以下函数末尾的 (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;
}
这些函数的最后一行是做什么用的?
这些函数不使用它们的参数,所以使用参数是为了消除 "unused parameter" 编译器警告。
包括对 (void)
的转换,因为如果没有它,大多数编译器会发出另一个警告,类似于 "expression result unused"(如果我没记错的话,在 GCC 的情况下)。