免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4601 | 回复: 26
打印 上一主题 下一主题

[C] 这是怎么回事?关于gcc [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-02 19:00 |只看该作者 |倒序浏览
前些日子才装的linux,今天想试一试gcc,用了之后发现我买的那本谭浩强C语言教程里面的代码在gcc编译不出来,比如,

# include <stdio.h>
void main()
{
        printf("hello world");
}

gcc编译出来的是错误的

vint@vint:~/桌面$ gcc hello.c -o hello
hello.c: 在函数‘main’中:
hello.c:3: 警告: ‘main’的返回类型不是‘int’
vint@vint:~/桌面$ ./hello
vint@vint:~/桌面$ nt:~/桌面$


但在windows下就能正确编译,难道是函数库不一样导致的结果?

论坛徽章:
0
2 [报告]
发表于 2009-06-02 19:09 |只看该作者
汗 楼主 你写错了,应该:
gcc -o hello hello.c

论坛徽章:
0
3 [报告]
发表于 2009-06-02 19:11 |只看该作者
原帖由 lsupper 于 2009-6-2 19:09 发表
汗 楼主 你写错了,应该:
gcc -o hello hello.c

这样写还是一样出问题

论坛徽章:
0
4 [报告]
发表于 2009-06-02 19:15 |只看该作者

回复 #3 Jokerdoi 的帖子

不会啊,我这里就警告~~

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
5 [报告]
发表于 2009-06-02 19:16 |只看该作者
原帖由 Jokerdoi 于 2009-6-2 19:00 发表
前些日子才装的linux,今天想试一试gcc,用了之后发现我买的那本谭浩强C语言教程里面的代码在gcc编译不出来,比如,

# include
void main()
{
        printf("hello world");
}

gcc编译出来的是错误的

vi ...


这个仅仅是warning
应该没有问题

main最好写成

  1. int main(void)
  2. {
  3.      ...

  4.      return 0;
  5. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2009-06-02 19:17 |只看该作者
恩,跟5楼一样 就警告~~~

论坛徽章:
0
7 [报告]
发表于 2009-06-02 19:24 |只看该作者
我按照2楼说的去弄,编译之后执行./hello 只出现了
vint@vint:~/桌面$ ./hello
vint@vint:~/桌面$ nt:~/桌面$
没有输出 hello world的信息~
但按照5楼说的写,就能正确编译出来,这是什么原因?我1楼的代码是教科书上的~~难道编译器不同,代码也不一样?

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
8 [报告]
发表于 2009-06-02 19:31 |只看该作者
原帖由 Jokerdoi 于 2009-6-2 19:24 发表
我按照2楼说的去弄,编译之后执行./hello 只出现了
vint@vint:~/桌面$ ./hello
vint@vint:~/桌面$ nt:~/桌面$
没有输出 hello world的信息~
但按照5楼说的写,就能正确编译出来,这是什么原因?我1楼的代 ...



http://www.rupeng.com/index.php/viewthread-286

在 C89(C语言的早期标准)中,main() 是可以接受void返回值的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language(《C 程序设计语言》)用的就是void main( )。不过在最新的 C99 标准中,只有以下两种定义方式是正确的:
int main( void )
int main( int argc, char *argv[] )
当然,我们也可以做一点小小的改动。例如: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 ,表示程序正常退出。
注意,vc6 不会在生成的目标文件中加入 return 0 ,大概是因为 vc6 是 98 年的产品,所以才不支持这个特性。不过,gcc3.2(Linux 下的 C 编译器)会在生成的目标文件中加入 return语句

http://zhidao.baidu.com/question/76002231.html
void main()这种定义在g++(一种c++编译器)中是被明确禁止的.



记住一点:void main是国内教材的不规范写法

论坛徽章:
0
9 [报告]
发表于 2009-06-02 20:44 |只看该作者
原帖由 openspace 于 2009-6-2 19:31 发表



http://www.rupeng.com/index.php/viewthread-286

在 C89(C语言的早期标准)中,main() 是可以接受void返回值的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language( ...

救星啊,怎么明白怎么回事了

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
10 [报告]
发表于 2009-06-02 21:15 |只看该作者
原帖由 openspace 于 2009-6-2 19:31 发表

Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language(《C 程序设计语言》)用的就是void main( )。

K&R 中什么时候这么写过?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP