【发布时间】:2019-09-19 21:44:25
【问题描述】:
我正在阅读this book 并且我遇到了这段代码:
static void
task1(void *args) {
int i;
(void)args;
for (;;) {
gpio_toggle(GPIOC,GPIO13);
for (i = 0; i < 1000000; i++)
__asm__("nop");
}
}
除了第 5 行外,我都(相对)了解。(void)args; 在做什么?
args 没有在函数体中使用,我知道如果不使用参数,那么可以写
static void
task2(void *args __attribute((unused))) {
// code here
}
这里没有做。那么(void) 写成这样是做什么的呢?
【问题讨论】:
-
奇怪的是,没有一个答案明确说明
(void)中的(void) args;正在做什么。它是一个强制转换,类似于(int) 3.5,将3.5 转换为int,或(char *) &x,将x的地址转换为指向char的指针。名义上,(void) args;将args的值转换为void类型。由于void没有值,因此转换不会产生任何值。在那之后,这里和原文的答案都适用:这是一种告诉编译器你故意忽略args的方式。