(void)在c ++中的含义是什么?

时间:2015-02-26 08:01:05

标签: c++

我正在查看一些具有如下函数的代码:

void f(A* a, B& b, C* c)
{
   (void)a;
   (void)b;
   (void)c;
}

每行开头的(void)究竟是什么?

4 个答案:

答案 0 :(得分:9)

你看到的只是一个"技巧"伪造变量/参数用法。

如果没有这些行,一个迂腐的编译器会警告你没有使用的变量。

使用构造(void)variablename;将导致不生成任何指令,但编译器会认为它是有效的"使用"那些变数。

答案 1 :(得分:3)

它只是一个避免编译器警告的kludge。例如,该代码将发出

warning: unused parameter ‘a’ [-Wunused-parameter]
warning: unused parameter ‘b’ [-Wunused-parameter]
warning: unused parameter ‘c’ [-Wunused-parameter]
如果没有使用kludge,则使用gcc -Wall -Wextra进行编译时

。虽然有更清洁的方法来实现这一目标。您可以省略参数名称:

void f(A*, B&, C*) {
}

gcc-specificc和稍微详细的替代方法是在每个未使用的参数上使用unused属性:

void f(A* a __attribute__((unused)), B& b, C* c) {
}

答案 2 :(得分:2)

我看到至少有两次反应。第一个是避免编译器警告变量已定义但未在函数体中使用。

第二个是它是非常古老的代码,如果没有使用表达式的结果,有时程序员会在表达式之前写入转换为void。这有助于编译器优化生成的目标代码。

答案 3 :(得分:-3)

每当我们用C ++编写函数时,我们都需要遵循函数原型,即

类型名称(parameter1,parameter2,...){statements}

此处type-代表它返回的值的类型

  1. 返回类型的void允许您定义不返回值的函数。请注意,它与返回0不同.0的值是integer,float,double等类型;这不是一个空白。 (在其他语言中,没有返回值的函数可以被称为"子例程"或"过程",而"函数"总是返回一些东西。在C /中C ++,它们都被称为函数。) 返回无效意味着什么都不返回。

  2. 指向void的指针是一个通用指针,可以在该位置的数据类型未知时使用。所以你可以使用一种void *来引用内存中的地址而不知道实际位于那里的地址。