我在检查代码时遇到了以下片段:
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;
}
What is (void)(a);
doing?
我在检查代码时遇到了以下片段:
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;
}
What is (void)(a);
doing?
一些编译器在函数中出现未使用的参数时可能会发出警告,使用(void)a
可以消除这种警告。
另一个常见的方法是:
int check(char *a)
{
a = a;
return 0;
}
#define UNUSED_VAR(x) (void)x
。 - glampert#define UNUSED_VAR(x) (void)(x)
。 - Cody Gray这段代码是为了消除编译器警告未使用的变量 'a'
。
这不是一种标准技术,它依赖于特定使用的编译器。虽然可以在编译器中关闭此警告,但有些人认为编译器诊断未使用的变量是有用的信息,因此使用此技术来表示变量故意未使用且他们不想看到警告。
正如glampert建议的那样,我认为使用一个名字为UNUSED_VAR
的宏更加清晰,这样读者就不会疑惑发生了什么。这种方法还具有一个优点,您可以在头文件中为各种编译器定义它。
(void)(a);
什么也不做,并且会被编译器删除。
在这种情况下,它的目的是显示它没有被使用,但这是有意的。此外,它还将抑制任何编译器警告,指出变量未使用。
check
的全部内容吗?如果只有这些,它实际上并没有检查任何东西。也许它是不完整的。 - user2357112