在函数调用之前使用(void)

con*_*ref 30 c c++

可能重复:
将未使用的返回值转换为void

(void)例如,在函数调用之前的目的是什么

(void)func1();
Run Code Online (Sandbox Code Playgroud)

我认为这和简单地调用一样 func1();

因此,(void)调用只是为了让其他程序员知道返回类型将被忽略,例如,如果func1()有返回类型int,或者编译器是否可能对函数执行某些优化?也许完全背后还有另一个原因 - 它甚至是合法的C++,还是在某些遗留代码中看到的C的残余.

谢谢

ben*_*bin 24

如果使用属性声明某些函数,它会阻止警告:"如果未使用/检查返回值,则发出警告"

也许是警告的重复:忽略'scanf'的返回值,使用属性warn_unused_result声明

查看gcc的文档:http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html(warn_unused_result)了解更多详情

  • 请注意,如果函数已经以这种方式声明,那么可能是有充分理由的.所以你应该添加一个检查返回值,而不是公然忽略它. (2认同)

eca*_*mur 22

在一种情况下,转换为void可以具有语义效果:其中值是逗号运算符的操作数并覆盖逗号运算符,转换为void将禁止它:

struct S {
  int operator,(int) { return 0; }
};
std::cout << (S(), 42) << '\n';           // prints '0'
std::cout << ((void) S(), 42) << '\n';    // prints '42'
Run Code Online (Sandbox Code Playgroud)


Jai*_*dra 5

这意味着很少。它显式地将行转换为 void 表达式,即仅用于其副作用且其值被丢弃的表达式。所以这些行

func1();
Run Code Online (Sandbox Code Playgroud)

(void)func1();
Run Code Online (Sandbox Code Playgroud)

也会做同样的事情。如果编译器知道未使用表达式的值,则可以执行一些优化,但编译器很可能可以在有或没有显式(void)的情况下弄清楚它。

它可以用作文档的一种形式,程序员试图表明他们没有使用表达式的值。