什么是(void)(p)在这做什么?

时间:2014-04-22 04:29:17

标签: c

我正在检查代码,但我遇到了以下代码段:

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);在做什么?

3 个答案:

答案 0 :(得分:6)

如果函数中没有使用函数参数,某些编译器可能会发出警告,(void)a可以使这些警告静音。

实现这一目标的另一个方法是:

int check(char *a)
{
    a = a;
    return 0;
}

答案 1 :(得分:4)

它应该禁止编译器警告Unused variable 'a'

这不是标准技术,它取决于使用的特定编译器。可以在编译器中关闭此警告。但有些人认为让编译器诊断未使用的变量是有用的信息,所以他们使用这种技术来表示变量是未被广泛使用的,并且他们不希望看到警告。

正如glampert所说,我认为使用名称为UNUSED_VAR的宏更清晰,因此读者不会想知道发生了什么。该方法还具有以下优点:您可以在头文件中为各种编译器定义它。

答案 2 :(得分:1)

(void)(a);什么都不做,将被编译成一无所有。

在这种情况下,它的目的是表明它没有被使用,但这是有意的,因为它会抑制任何编译器警告声明该变量未被使用。