社区
新手乐园
帖子详情
关于void main
落叶
2006-06-27 12:26:32
我听人家说这是不标准的写法。。那正确的写法是什么?为啥不标准的写法还能执行呢?
...全文
1159
13
打赏
收藏
关于void main
我听人家说这是不标准的写法。。那正确的写法是什么?为啥不标准的写法还能执行呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wumingchenchao
2006-07-09
打赏
举报
回复
C/C++ 误区一:void main()
很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有
定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The
definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.
( void main( ) 从来就不存在于 C++ 或者 C )。下面我分别说一下 C 和 C++ 标准中对 main 函数的
定义。
“The C programming Language(《C 程序设计语言》)用的就是 main( )。”
--- 这是因为第一版的C语言只有一种类型,那就是int,没有char,没有long,没有float,…………
既然只有一种类型,那么就可以不写,后来的改进版为了兼容以前的代码于是规定:不明确标明返回值的
,默认返回值为int,也就是说 main()等同于int main(),而不是等同于void main()。
在C99中,标准要求编译器至少给 main() 这种用法来个警告。
1. C
在 C89 中,main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著
The C programming Language 2e(《C 程序设计语言第二版》)用的就是 main( )。不过在最新的 C99
标准中,只有以下两种定义方式是正确的:
int main( void )
int main( int argc, char *argv[] )
(参考资料:ISO/IEC 9899:1999 (E) Programming languages — C 5.1.2.2.1 Program startup)
当然,我们也可以做一点小小的改动。例如:char *argv[] 可以写成 char **argv;argv 和
argc 可以改成别的变量名(如 intval 和 charval),不过一定要符合变量的命名规则。
如果不需要从命令行中获取参数,请用int main(void) ;否则请用int main( int argc, char
*argv[] ) 。
main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统)。
如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(
如 exe 文件)加入return 0; ,表示程序正常退出。不过,我还是建议你最好在main函数的最后加上
return 语句,虽然没有这个必要,但这是一个好的习惯。注意,vc6不会在目标文件中加入return 0; ,
大概是因为 vc6 是 98 年的产品,所以才不支持这个特性。现在明白我为什么建议你最好加上 return
语句了吧!不过,gcc3.2(Linux 下的 C 编译器)会在生成的目标文件中加入 return 0; 。
2. C++
C++98 中定义了如下两种 main 函数的定义方式:
int main( )
int main( int argc, char *argv[] )
(参考资料:ISO/IEC 14882(1998-9-01)Programming languages — C++ 3.6 Start and termination)
int main( ) 等同于 C99 中的 int main( void ) ;int main( int argc, char *argv[] ) 的
用法也和 C99 中定义的一样。同样,main 函数的返回值类型也必须是int。如果main函数的末尾没写
return语句,C++98 规定编译器要自动在生成的目标文件中加入 return 0; 。同样,vc6 也不支持这个
特性,但是 g++3.2(Linux 下的 C++ 编译器)支持。
3. 关于 void main
在 C 和 C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能
正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把main函数定义成void main(void) 。
然而这是错误的!main 函数的返回值应该定义为 int 类型,C 和 C++ 标准中都是这样规定的。虽然在
一些编译器中,void main 可以通过编译(如 vc6),但并非所有编译器都支持 void main ,因为标准
中从来没有定义过 void main 。g++3.2 中如果 main 函数的返回值不是 int 类型,就根本通不过编译
。而 gcc3.2 则会发出警告。所以,如果你想你的程序拥有很好的可移植性,请一定要用 int main .
lollol
2006-07-08
打赏
举报
回复
main(void)好像能接受
mopyman
2006-07-08
打赏
举报
回复
我喜欢这样用int main(int argc, char** argv)
zhanzhenbo
2006-07-06
打赏
举报
回复
int main(int argc, char* argv[])
celeil
2006-07-06
打赏
举报
回复
一般来讲在C里可以写"main()",这是因为C把int当作默认类型,凡是没给类型的都当作int。如果你在C里声明一个变量,比如“i”,然后没给类型说明符,那么编译器会把它当int类型。
C++就不这么干了,尤其是标准的C++,就不把int当作默认类型,所以写main函数的时候,你要写明是int类型。
另外一点值得一提的是main后面的这个括号“()”,他在C++里面表示不接受任何参数,而在C里面则表示接受任何参数。在C里,不接受任何参数,一般指明void。所以,在C里,main函数的声明,可以是“int main(void)”。
vvoody
2006-07-06
打赏
举报
回复
int main()
lbing7
2006-07-06
打赏
举报
回复
我只知道,大米看了想抽你...
rollor_phoe
2006-07-06
打赏
举报
回复
int main()
{
return 0;
}
int main(int argc, char* argv[])
{
return 0;
}
apricot0819
2006-07-06
打赏
举报
回复
main还应该有个返回值吧。。
以前的那书中的main直接出来也不是对的
落叶
2006-06-27
打赏
举报
回复
谢谢大家、我明白了
xiaonian_3654
2006-06-27
打赏
举报
回复
char main = 0xc3;
这样写都可以的,如果cpu是x86的,还可以正确执行
bruceteen
2006-06-27
打赏
举报
回复
ISO/IEC 14882:2003 说:所有实现应当允许以下两种形式
int main()
int main(int argc, char* argv[])
-----------------------------------
这就是说每个C++编译器都应该有以上两个形式,只要是以上两个形式之一则在一切C++编译器中都可编译通过。
晨星
2006-06-27
打赏
举报
回复
正确的main函数应该返回int。
能够编译运行是因为你所用的编译器管得松,可能是考虑到有的人已经习惯了,有一些老代码也是写了好多年了,能不让他们改就不让他们改了。
但并不是每一种编译器能这么好脾气的,有的编译器就直接报错。
辨析int
main
()、int
main
(
void
)、
void
main
(
void
)、
main
()和
main
(
void
)、int
main
() 和
void
main
()
本文详细解析了C语言中
main
函数的不同形式及其含义,包括int
main
、
void
main
、
main
()和
main
(
void
)的区别,阐述了返回值对于操作系统的重要性。
void
main
与
main
(
void
)
博客主要探讨了
void
main
与
main
(
void
)的相关问题。
void
main
是遗留问题,之后可能是未定义行为,编译器不做类型检查,有的编译器会添加 return 0;C 语言调用者清栈,
main
(
void
)不写参数也能运行,只是拿不到命令行参数,如今实现多会补上 return 0 或报错。
C++之
main
() ,
void
main
() ,int
main
()等区分
本文详细解析了C++中各种
main
函数的写法及其区别,包括int
main
()、int
main
(int argc, char* argv[])与
void
main
()的不同用法,探讨了函数参数与返回值的意义,并提出了编程建议。
void
main
和int
main
的区别
本文探讨了C语言中
void
main
()和int
main
()的区别,指出
void
main
()通常用于无返回值的情况,而int
main
()的标准规定了返回一个整型值以指示程序执行状态。尽管实际运行中两者差异不大,但推荐使用int
main
()以符合规范。
C语言中
void
main
和int
main
有什么区别?
本文详细解释了C语言中
main
函数的不同形式,包括
void
main
和int
main
的区别,以及为何推荐使用int
main
。阐述了返回值的意义及其对于操作系统的重要性。
新手乐园
33,316
社区成员
41,770
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章