在以下函数中
int f (some_struct* p)
{
(void) p;
/* something else */
return 0;
}
声明是什么
(void) p;
意思?
答案 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?