函数参数列表为空和void的区别
来源:互联网 发布:mysql安装失败 编辑:程序博客网 时间:2024/05/16 04:19
在C/C++的学习过程中,一个很常见的问题就是void main和int main有什么区别呢?本文试图回答该问题,并涉及一些相关问题,包括一些main函数的其他实现。
首要说明的一点是这些(主题)可能是人们看起来会为之争辩几小时甚至好几天的问题。有些论据是有根据的,有些不是,而有些只是普通而过时的观点。C标准和C++标准在main函数上是有区别的,所以我分别详细来介绍他们。separately.
对于C语言:
C89标准的main()函数是可接受的,尽管现在建议是使用C99的标准。C99标准只定义了如下两种可接受的函数原型:
int main ( void )
int main ( int argc, char *argv[] )
以上函数原型微小的变形也是可以被接受的,比如int可以被typedef定义为int的名字所代替,argv的类型也可以写成char **argv,等等。
第一种函数原型选择适用你不许要访问命令行参数的时候。
对于第二种函数原型选择,如果你喜欢的话,标识符argc和argv的名字可以改变,但是坚持使用argc/argv是一个惯例。
main()函数的返回值必须是一个int型,返回值给main()函数的调用者传递一个int类型的状态。
在C89标准下,main()函数中的return语句是必须的;然而在C99标准下,如果没有写return语句,默认(隐含的)会return 0。
对于C++语言:
可以被接受的使用方式有:
int main ( int argc, char *argv[] )
int main ()
第一种遵循被C99中使用的惯例。
第二种适用于不需要访问命令行参数的环境,相当于C99中的int main(void)。
return必须返回一个int型数值,默认返回0(但是标准中并没有要求)。
int main() 和int main(void)的区别
C程序员通常误认为下面的函数原型是不要参数的:
int foo();
事实上,这个函数是被认为需要不确定个数的参数。告诉编译器函数为不带参数的正确做法是:在括号中使用void 关键字。
void main()的细节(机理):
C和C++中正常的函数调用和返回,假如你不想从一个函数中返回任何东西,你可以定义函数的返回值类型为void。例如,一个函数不带参数,无返回值的函数原型可以定义为:
void foo(void);
一个正常的误解是这样的逻辑也被应用于main函数。是的,它不可以,main函数是特殊的,你应该遵循标准并定义函数的返回值为int。但是在一些特殊的系统中是可以的。如果你不确定你正在使用的是否是特殊系统之一的话,那答案就是“不是”。如果是特殊系统的话,你应该已经知道了。
提醒你如果你在论坛上发带有"void main"的代码,会有人来告诉你要你纠正它。如果你回复说“我的老师说这样是可以的”也无用。老师们有错误的习惯。安全期见,在论坛上只贴标准的代码,然后你会发现人们集中在回答你的问题,而不是在告诉你函数原型的事情上浪费时间。a
但是int main(int argc, char *argv[], char *envp[])是怎么回事呢?
作为对标准的扩展,在一些系统中一个附加的main函数参数可以被用来获得并访问环境变量。这并不保证在所有的编译器上都能正常工作,如果你想让你的代码可移植,那么请慎重使用它。
最后,这个网页告诉我们一些关于为什么void main函数是不好的用法的背景知识。
- 函数参数列表为空和void的区别
- :-) 参数列表为空和为void 的区别
- C语言中函数的参数列表为空和void的区别
- 函数参数为void和没有参数的区别
- C语言函数参数为空和void
- c和c++函数参数为void / void *
- c和c++函数参数为void / void *
- void声明空参数表,main()函数的参数也可以用void填充表示没有参数
- fun()参数列表为空,表示可接受任意多个参数,而fun(void)表示无参数
- 关于函数参数(void与空)
- 函数参数返回值 void 和 void *
- void 和 void* 的区别
- 空参数列表的函数在C和C++的差异
- 关于C语言中的形参列表空着与加void的区别
- 关于C语言中的形参列表空着与加void的区别
- Python的 函数 参数为数据结构和表的区别
- 函数的参数为引用和指针的区别
- void ( *p ) (void) 和 void ( *p () ) (void)的区别
- 【C解析之一】数据类型
- jQuery select操作控制方法小结
- Linux部署Java应用Too many open files解决方案
- 练练正则
- 高级字符驱动程序操作(poll机制)
- 函数参数列表为空和void的区别
- AOMDV协议中的路由表rt
- Hibernate实战_笔记13(切换回Hibernate接口)
- 动态数组vector和List
- Linux C一站式学习习题答案 剪刀石头布
- ASP.NET 生成分页HTML标签
- Part 3. Classes and Data Abstraction
- POJ 1723 SOLDIERS
- java.lang.ClassNotFoundException: Didn't find class "*****Activity" on path: /data/app/*******.apk