我正在检查代码,但我遇到了以下代码段:
int check(char *a)
{
(void)(a);//What is this line doing??
return 0;
}
int main(void)
{
char *p;
p=(char *)malloc(sizeof(char));
check(p);
return 0;
}
(void)(a);
在做什么?
答案 0 :(得分:6)
如果函数中没有使用函数参数,某些编译器可能会发出警告,(void)a
可以使这些警告静音。
实现这一目标的另一个方法是:
int check(char *a)
{
a = a;
return 0;
}
答案 1 :(得分:4)
它应该禁止编译器警告Unused variable 'a'
。
这不是标准技术,它取决于使用的特定编译器。可以在编译器中关闭此警告。但有些人认为让编译器诊断未使用的变量是有用的信息,所以他们使用这种技术来表示变量是未被广泛使用的,并且他们不希望看到警告。
正如glampert所说,我认为使用名称为UNUSED_VAR
的宏更清晰,因此读者不会想知道发生了什么。该方法还具有以下优点:您可以在头文件中为各种编译器定义它。
答案 2 :(得分:1)
(void)(a);
什么都不做,将被编译成一无所有。
在这种情况下,它的目的是表明它没有被使用,但这是有意的,因为它会抑制任何编译器警告声明该变量未被使用。