什么是C中的铸造参数语句?

时间:2013-08-30 00:21:00

标签: c

在以下函数中

int f (some_struct* p)
{
    (void) p;
    /* something else */
    return 0;
}

声明是什么

(void) p; 

意思?

4 个答案:

答案 0 :(得分:12)

该语句在运行时不执行任何操作,并且不会导致任何机器代码。

它禁止编译器警告p在函数体中未使用。这是一种可移植且安全的方法,可以在各种不同的编译器中抑制此警告,包括GCC,Clang和Visual C ++。

答案 1 :(得分:2)

“强制转换为void”是一种C语言习惯用法,按照惯例,它禁止编译器和lint有关未使用变量或返回值的警告。

在这种情况下,正如Dietrich Epp正确指出的那样,它告诉编译器你知道你没有使用参数p,而不是给你“未使用的参数”警告。

这个习惯用法的另一种用法是将函数的返回值强制转换为void,这是告诉lint的传统方式,或者更重要的是,告诉其他程序员你做出了有意识的决定不要费心检查函数的返回值。例如:

(void)printf("foo")

意思是“我知道printf()会返回一个值,我应该检查它,但我决定不打扰”。

答案 2 :(得分:0)

它用于避免未使用的函数参数的警告。它只是被丢弃,除了表达式有副作用外什么都不做。

  

C11§6.3.2.2无效

     

void表达式(具有void类型的表达式)的(不存在)值不应   以任何方式使用,隐含或显式转换(无效除外)不得   适用于这样的表达。 如果任何其他类型的表达式被评估为void   表达式,其值或指示符被丢弃。 (评估void表达式   副作用。)

避免未使用函数参数警告的另一种方法是:

p = p;

答案 3 :(得分:0)

void告诉编译器或lint不发出警告。如果有一个永远不会被使用的变量,编译器或lint会建议你删除它。

如果您不想删除它,可以使用void。与链接一样:How can I hide "defined but not used" warnings in GCC?