关于main的形式与return 0;

qiucanghuai 2009-10-25 12:28:59
根据C99标准以及众人唾弃的void main()
标准的main形式为

int main()
int main(int argc,char* argv[])

// int main(void) 这个在c primer plus里面的,是标准吧?

1、那么,为什么要int呢,我同学说main()就可以了,我说这是C99标准,他说一样说我麻烦,而且能编译通过,这点让我很囧很郁闷,那么用 main()的坏处 后遗症 又会有什么呢?小菜我又该从何选择?

2、c primer plus里面结尾都是return 0; 而国内教材看到的大多是 没有return 0;
那么加与不加,差别在哪里,坏处呢?(这点也深深被我那个同学鄙视,他说麻烦,我说着是标准!!)

3、对于小程序,课本上的问题,是否应该才一开始就要严格坚守这个标准。
(班上估计就我一个坚守c99标准,倒看我像外星人,我也懒得跟他说是C99了,直接无视他。)


分不多,请笑纳。
...全文
491 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
AAA20090987 2009-10-26
  • 打赏
  • 举报
回复
支持真理,支持C99
youling3344 2009-10-26
  • 打赏
  • 举报
回复
我不知道是否应该跟op讨论iso网络标准和一般通用的网络标准?
tananade 2009-10-26
  • 打赏
  • 举报
回复
使用标准的没错
pmerOFc 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 dreamfgt 的回复:]
现在的学校教育根本没有 标准 这个概念
能编译过就是正确的
[/Quote]

以TC2.0编译器为标准是普遍的情形
问题是TC2.0已经用了20多年了
Borland那帮家伙肯定窃笑,不,狂笑不已
Borland不给老谭发枚勋章是怎么也说不过去的
unsv29mj 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 youling3344 的回复:]
我不知道是否应该跟op讨论iso网络标准和一般通用的网络标准?
[/Quote]

你的回复太经典了!!!厉害!!!一言定乾坤!
clc0925 2009-10-26
  • 打赏
  • 举报
回复
最近也在关注这个问题!
pang123hui 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 qiucanghuai 的回复:]

(班上估计就我一个坚守c99标准,倒看我像外星人,我也懒得跟他说是C99了,直接无视他。)

[/Quote]

我们班上也就我一个用C99标准,他们和老师都不用,管他呢

反正我还是C99,也不用和别人争什么
pang123hui 2009-10-25
  • 打赏
  • 举报
回复
http://blog.csdn.net/pang123hui/archive/2009/10/13/4664131.aspx
飞天御剑流 2009-10-25
  • 打赏
  • 举报
回复
1、那么,为什么要int呢,我同学说main()就可以了,我说这是C99标准,他说一样说我麻烦,而且能编译通过,这点让我很囧很郁闷,那么用 main()的坏处 后遗症 又会有什么呢?小菜我又该从何选择?
------------------------------------------------------------------------------
C89存在许多隐含规则,当main不写返回类型时,默认表示int,类似这样的隐含规则在c89中到处都是,这是兼容旧代码的结果。使用c89的编译器时,这样的写法不能说他错,这不是对与错的问题,更不是麻烦不麻烦的问题,而是代码风格问题,应该保持一个良好清晰的风格,让阅读者感到愉悦。即使使用c89编译器,使用int main( void )而不是main()更好更专业,特别是那个void,在C中最好显式写上,因为C中的空形参列表不表示没有参数,而是形参的个数和类型未知,C++中才表示空列表。


2、c primer plus里面结尾都是return 0; 而国内教材看到的大多是 没有return 0;
那么加与不加,差别在哪里,坏处呢?(这点也深深被我那个同学鄙视,他说麻烦,我说着是标准!!)
------------------------------------------------------------------------------
还是代码风格问题,被鄙视的应该是那个同学,他迟早要为此付出代价



3、对于小程序,课本上的问题,是否应该才一开始就要严格坚守这个标准。
(班上估计就我一个坚守c99标准,倒看我像外星人,我也懒得跟他说是C99了,直接无视他。)
-------------------------------------------------------------------------
坚守标准是一定要的,只是不能只看一个标准,因为支持不同标准版本的编译器都存在,各种版本标准的异同都应该熟悉。坚持以标准作为准则可以让你洞悉一切。
hrnf2009 2009-10-25
  • 打赏
  • 举报
回复
还是标准的好
ZangXT 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xedazss 的回复:]
我看的浩强书上
不是说最好不要
int main ()么

他上面是用的
void main()
是标准不一样吗?
[/Quote]
谭老师有自己的标准。
pmerOFc 2009-10-25
  • 打赏
  • 举报
回复
C99不容许的是把缺省当作int
omegabomb 2009-10-25
  • 打赏
  • 举报
回复
main()前面不加int是从C里面移植过来的,C++好像推荐用int main()
dreamfgt 2009-10-25
  • 打赏
  • 举报
回复
现在的学校教育根本没有 标准 这个概念
能编译过就是正确的
unsv29 2009-10-25
  • 打赏
  • 举报
回复
像我 最常用得是void main(void)因为一般情况 我不用什么操作系统

用什么最好是看看你用的编译器所带的例子。

reutrn 0 我也不用。

主要看你用C语言干什么了!!
guzhijie1981 2009-10-25
  • 打赏
  • 举报
回复
关于int main(int argc ,char ** args)
1;首先谈谈为什么要用返回return 0;对于应用程序在执行之前,也就是在进入main函数之前;操作系统会调用execv函数(有好几个,具体作用我也在看);将磁盘上的你写的程序装入内存 ;当你的程序执行到main函数结束;系统隐式的调用exit函数;这才是一个程序作为进程的整个过程;
对于操作系统来说;他需要知道这个程序执行的状态;也就是说他需要知道这个程序是否执行成功;renturn 0;就是返回给操作系统的状态;
在早期的编译器中;是默认返回值是int的;换句话说如果你没有return 0;可能系统就会把某个寄存器的值;或者某个内存的值当作这个程序执行的返回值;所以一定要加return 0;(我还没有研究过如果那些值表示不成功;分别表示什么意思;)
有个老实的编译器;已经 一些原来的代码;采用的是void;为了兼容所以允许用void main();其实C99标准已经要求必须写成int main(int argc ,char ** args)这个格式;其实本来main有3个参数;第3个参数是表示环境变量的《UNIX高级编程》有讲;
可能有些地方没有说对;但是大体是这样的;HOHO;随便给点分我吧;我下载东西没有积分了;
有不明白可以联系QQ 326238989
wzywsk 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 pmerofc 的回复:]
int main(void)
int  main(int  argc,char*  argv[])
恰恰是C89的要求
其他形式不合法

[/Quote]
这是标准写法,C++是int main()
pmerOFc 2009-10-25
  • 打赏
  • 举报
回复
void main()从来就是一种个别编译器容许的方言
pmerOFc 2009-10-25
  • 打赏
  • 举报
回复
int main(void)
int main(int argc,char* argv[])
恰恰是C89的要求
其他形式不合法
jzd8000 2009-10-25
  • 打赏
  • 举报
回复
走自己的路,让别人说去吧!
加载更多回复(8)

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧