【发布时间】:2020-10-21 01:22:21
【问题描述】:
在 C/C++ 中,有两种方法可以声明一个不返回任何内容的函数。 第一个是声明一个不带参数的函数:
// no arguments
void f() {
}
第二个是声明一个接受void的函数:
// still no arguments
void f(void) {
}
但是,函数结果不是这样:我们不能像这样在函数开头省略void:
// returns nothing
f() {
return; // yay
}
那么,绝对没有办法像函数参数一样在函数开头省略void?
【问题讨论】:
-
嗯,不,不是真的,除非你计算返回
auto。无论如何,这有什么意义?它只有5个字符。从技术上讲,在 C-89 中,您可以省略返回类型,它会被假定为“int”,但不建议这样做。 C++ 中没有隐式整数。另请注意,void f()没有在 C 中定义不带参数的函数,它定义了一个带不确定数量参数的函数,这意味着编译器不会检查对f的函数调用是否具有正确数量的参数论据。 -
C 还是 C++?它们是不同的语言,对函数定义中的空参数列表有不同的 IIRC 规则。
-
至少在 C 中,
f()和f(void)实际上是非常不同的。此外,指定函数的返回类型有助于解析,尤其是在 C++ 的语法混乱中。 -
正如我看到的警告忽略者之一(非常非常糟糕)。如果您阅读警告,答案将很明显:
<source>:4:1: warning: return type defaults to 'int' [-Wimplicit-int] f() { ^ <source>: In function 'f': <source>:5:3: warning: 'return' with no value, in function returning non-void return; // yay ^~~~~~ -
您只能在 C89 或更早版本中执行此操作。 C++ 不允许这样做。较新的 C 标准也没有