示例:
void Function(int Number)
{
process.....
**return;**
}
是否必须使用" return"在每个功能的最后还是没有?
示例2:
void Function(**void**)
{
process...
}
使用" void"如果我没有收到任何值,那么在参数列表中是否必要?
有人说不,有人说是。 什么是完全理解编译器和C语言中的最佳实践的权利?
答案 0 :(得分:6)
在参数中省略void
意味着该函数接受任意数量的参数:
假设一个程序:
void func() {
}
void func2(void) {
}
int main(void) {
func(2);
func2(2);
}
现在使用gcc -std=c11 -Wall -pedantic test.c
对其进行编译,您只会从func2
收到错误:
test.c: In function ‘main’:
test.c:9:5: error: too many arguments to function ‘func2’
func2(2);
^
test.c:4:6: note: declared here
void func2(void) {
也就是说,GCC用参数调用void func();
不是编译时错误,而用参数调用void func2(void)
是编译时错误。即使该函数没有任何参数,仍然可以用任意数量的参数调用它。
但是,即使这是编译,6.5.2.2函数调用也会说“如果参数的数量不等于参数的数量,则行为是未定义的”。 (并且使用1个参数调用func
,但没有参数)。
C11标准n1570工作草案说明如下:
6.11.6函数声明符
- 使用带有空括号的函数声明符(不是prototype-format参数 类型声明者)是一个过时的功能。
醇>
(有趣的事实:标准本身在其示例中使用int main()
。
对于return
语句,如果它是最后一个语句,则可以从返回void的函数中省略它。返回有2个用法 - 终止函数的执行并指定返回给调用者的值。
标准草案说:
- 甲 返回 语句终止当前函数的执行并将控制权返回给 它的来电者。一个函数可以有任意数量的 返回 语句。
醇>
这里的任何一个都意味着返回一个或多个不返回值的函数(返回void
)的函数都允许 no return
语句。
功能声明草案中的6.9.1说:
- 如果
醇>}
到达函数终止,并使用函数调用的值 调用者,行为未定义
因此,如果函数返回值(不是void
),和,则忽略return语句是未定义的行为,调用者使用该值。 (作为一个例外,该标准还表示,指定行为,省略return
中的main()
语句现在等同于返回0)。
答案 1 :(得分:5)
根据C标准(6.7.6.3函数声明符(包括原型)
- 类型为void的未命名参数的特殊情况 list中的item指定该函数没有参数。
醇>
- 标识符列表仅声明参数的标识符 功能。函数声明符中的空列表 该函数的定义指定该函数没有 参数。函数声明符中的空列表不是其中的一部分 该函数的定义指定没有关于的信息 提供参数的数量或类型。 145)
醇>
脚注145引用“未来方向§6.11.6”和“使用带空括号的函数声明符(不是prototype-format参数) 类型声明者)是一个过时的功能。“
因此声明
void f( void );
表示该函数没有参数。
声明
void f();
表示参数的数量和类型未知。
声明同时是一个定义
void f()
{
}
表示该函数没有参数。
对于返回类型为void
的函数中的return语句,如果它是函数的最后一个语句,那么通常会省略它。使用最后一个return语句只会混淆代码的读者,因为他必须确保return语句中缺少表达式不是拼写错误。
答案 2 :(得分:3)
当使用void
作为返回类型时,没有必要编写return
语句,因为本质上void意味着不返回任何内容。但是,如果要显式退出该函数,可以使用return
。
void
作为参数并不是必需的,它只表示没有传递参数。
答案 3 :(得分:3)
将return
用于void
函数的唯一真正原因是提前退出函数。根据C99§5.1.2.2.3程序终止,假设0
的返回值为main
而没有return
:
到达终止main函数的}返回值0
但最好准确指定要返回的值。
为回应酷男评论,以下代码使用gcc
标记-std=c89
,-std=c99
和-std=c11
进行编译:
#include <stdio.h>
int main(void) {
printf("Hello world\n");
}
至于void
作为通知C编译器您正在使用新函数声明样式而不是旧样式所必需的参数。从技术上讲,它可以省略,但要小心,void
是首选方法。