是否必须使用;return";及;“无效”;在C中的函数中?
示例:是否必须使用;return";及;“无效”;在C中的函数中?,c,function,return,void,C,Function,Return,Void,示例: void Function(int Number) { process..... **return;** } void Function(**void**) { process... } 是否必须在每个函数末尾使用“return” 示例2: void Function(int Number) { process..... **return;** } void Function(**void**) { process... } 如果我没有收到
void Function(int Number)
{
process.....
**return;**
}
void Function(**void**)
{
process...
}
是否必须在每个函数末尾使用“return”
示例2:
void Function(int Number)
{
process.....
**return;**
}
void Function(**void**)
{
process...
}
如果我没有收到任何值,是否需要在参数列表中使用“void”
有些人说不,有些人说是。
对于编译器和C语言中的最佳实践有什么好的理解?当使用
void
作为返回类型时,不必编写return
语句,因为void本质上意味着不返回任何内容。但是,如果要明确退出函数,可以使用return
void
由于参数不是必须的,它只表示没有传递任何参数 对void
函数使用return
的唯一真正原因是提前退出该函数。根据C99§5.1.2.2.3程序终止,对于不带返回的main
假设返回值0
:
到达终止主函数的}时返回值0
但最好确切地指定要返回的值
为了回应cool guys的评论,以下代码使用带有标志的-std=c89
、-std=c99
和-std=c11
编译:
#include <stdio.h>
int main(void) {
printf("Hello world\n");
}
#包括
内部主(空){
printf(“Hello world\n”);
}
至于void
,它是通知C编译器您正在使用新的函数声明样式而不是旧样式所必需的参数。技术上可以省略,但要小心,void
是首选方法。根据C标准(6.7.6.3函数声明器(包括原型)
void类型的未命名参数作为唯一
列表中的项指定函数没有参数
标识符列表仅声明参数的标识符
函数的一部分。函数声明符中的一个空列表
对该函数定义的定义指定该函数没有
参数。函数声明符中不属于一部分的空列表
该函数的定义的定义指定没有关于
提供了参数的数量或类型。145)
脚注145涉及“未来方向§6.11.6”和“使用带空括号的函数声明符(非原型格式参数
类型声明器)是过时的功能。“
因此声明
void f( void );
表示函数没有参数
声明
void f();
表示参数的数量和类型未知
同时也是一个定义的声明
void f()
{
}
表示函数没有参数
对于返回类型为void
的函数中的return语句,如果它是该函数的最后一条语句,则通常会忽略它。使用最后一个return语句只会让代码的读者感到困惑,因为他必须确保return语句中没有表达式不是打字错误。在参数中省略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函数调用也会说“如果参数的数量不等于参数的数量,则行为是未定义的。”(并且func
是使用1个参数调用的,但没有参数)
C11标准n1570工作草案规定如下:
6.11.6功能声明器
使用带空括号的函数声明符(不是原型格式参数
类型声明器)是一种过时的功能
(有趣的事实:标准本身在其示例中使用了int main()
)
对于return
语句,如果它是最后一条语句,则可以从返回void的函数中省略它。Return有2个用法-终止函数的执行并指定返回给调用方的值
标准草案说:
A
返回
语句终止当前函数的执行并将控制权返回给
它的呼叫者。一个函数可以有任意数量的
返回
声明
此处的Any表示返回值的函数或不返回值的函数(返回void
)都不允许有return
语句
功能声明草案中的6.9.1规定:
如果
}
到达终止函数的,函数调用的值由
调用方的行为未定义
因此,如果函数返回一个值(而不是void
),并且调用者使用该值,则省略return语句是未定义的行为。(作为例外,该标准还规定,在main()
中省略return
语句现在相当于返回0)当使用void作为函数返回类型时,不需要返回任何值。换句话说,如果你想返回一些东西,那么你应该使用特定的数据类型当使用void
时,这意味着没有要返回的值。因此您不必返回任何值,return代码>等于什么也不返回。当您没有提到