社区
新手乐园
帖子详情
关于void main
落叶
2006-06-27 12:26:32
我听人家说这是不标准的写法。。那正确的写法是什么?为啥不标准的写法还能执行呢?
...全文
1112
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
()而不是
void
main
()
这里写目录标题C/C++ 小误区:
void
main
()CC++关于
void
main
返回值的作用那么 int
main
( int argc, char *argv[], char *envp[] ) 呢? C/C++ 小误区:
void
main
() 这是基于我们学校老师一直使用
void
main
(),而发...
关于
void
main
(
void
)的错误
虽然我一直知道, int
main
(
void
) { return 0; } int
main
(int argc,char**argv) { return 0; } 这种写法是c99标准里面规定的。 但我不知道为什么会是这样。...
void
main
和int
main
的区别
其实
main
也是一个函数; #include<...如上代码所示,int
main
(
void
)和int
main
()是一样的(括号里没有东西就相当于
void
) 说明
main
函数有一个int类型的返回值。 int
main
()是C语言的规范,要求
main
函...
C语言中
void
main
和int
main
有什么区别?
void
main
没有返回值,int
main
有返回值。 2、返回值类型 int
main
返回int类型的数据,
void
main
不返回。 但是在C语言推荐写法中,建议使用int
main
,因为在有的编译器虽然viod
main
可以通过编译,但在其他编译器...
void
main
和 int
main
的区别
main
是一切(控制台)程序都必须有的一个入口函数
main
函数是否有返回值在绝大多数情况下无关紧要 ...
void
main
是写入,int
main
是定义读取你要求的东西。
void
的意思是没有返回值,int的意思是返回...
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章