当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 13 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [讨论]关于 Gcc 编译 C main 返回值的问题
帖子发表于 : 2008-06-01 16:55 
头像

注册: 2007-10-22 21:48
帖子: 63
地址: Hell Mainland
送出感谢: 0 次
接收感谢: 0 次
代码:
#include <stdio.h>
#include <math.h>
void main() {
        int num, i;
        double power, sum = 0;
        printf("请输入一个数:");
        scanf("%d", &num);
        for(i = 1; i <= 10; i++) {
                power = pow(num, i);
                printf("%d 的 %d 次幂为:%5.0f\n", num, i, power);
                sum += power;
        }
        printf("这个数 1 ~ 10 次幂的和为:%5.0f\n", sum);
}

在 VC++ 6 下编译完全正确。但用 Gcc 编译会产生警告,但能生成可执行文件,能执行成功。
若改成这样:
代码:
#include <stdio.h>
#include <math.h>
int main() {
        int num, i;
        double power, sum = 0;
        printf("请输入一个数:");
        scanf("%d", &num);
        for(i = 1; i <= 10; i++) {
                power = pow(num, i);
                printf("%d 的 %d 次幂为:%5.0f\n", num, i, power);
                sum += power;
        }
        printf("这个数 1 ~ 10 次幂的和为:%5.0f\n", sum);
        return 0;
}

在 Gcc 下编译,完全正确。
疑问:
1、以上哪种为标准的语法?
2、main 的返回值 0,有何用处?返回 1 行吗?

顺便問一下,在论坛发帖如何让代码语法突显?


页首
 用户资料  
 
2 楼 
 文章标题 : 课本、老师都误人子弟啊
帖子发表于 : 2008-06-01 18:04 
头像

注册: 2007-10-22 21:48
帖子: 63
地址: Hell Mainland
送出感谢: 0 次
接收感谢: 0 次
课本和老师都是用的 void main(),在 VC++ 6.0 中也能正确编译。真是误人子弟阿!

刚搜索了一下,C 语言中 main 函数的正确写法只有以下两种正确写法:
1、
代码:
int main( void )

2、
代码:
int main( int argc, char *argv[] )

后面记得要加
代码:
return 0;


最后由 liuxuwen 编辑于 2008-06-01 18:22,总共编辑了 1 次

页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-06-01 18:18 
头像

注册: 2006-05-03 0:39
帖子: 8273
地址: المريخ
送出感谢: 0 次
接收感谢: 1
顺便答一下:论坛无语法突显功能。

另外,返回0,代表程序运行成功。


_________________
PHP是最好的语言!不服来战!


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-06-01 18:23 
头像

注册: 2007-10-22 21:48
帖子: 63
地址: Hell Mainland
送出感谢: 0 次
接收感谢: 0 次
谢谢回答。


页首
 用户资料  
 
5 楼 
 文章标题 : void 返回值的作用
帖子发表于 : 2008-06-01 18:34 
头像

注册: 2007-10-22 21:48
帖子: 63
地址: Hell Mainland
送出感谢: 0 次
接收感谢: 0 次
返回值为 0,表示正确执行;非 0,执行有误。

可以用
代码:
# echo $?
查看上个程序执行的返回值。

也可用
代码:
          //假设编译出的可执行程序为 power
# ./power && ls    //如果 ls 被执行,说明power 正确执行。&&为并
# ./power || ls      //如果ls未执行,说明power正确执行。||为非

查看程序是否正确执行,


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-06-06 10:53 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
写法有几种
代码:
int main( int argc, char *argv[] )

int main(int argc, char** argv)


ANSI C 99 标准规定的是
代码:
int main(...)
{
  return 0;
}



看看Brian W. Kernighan, Dennis M. Ritchie 著的《The C Programming Language, Second Edition》中文版吧!


引用:

我就是想不明白,为什么有人一面竭斯底里喊发展开源和软件产业,一面制定从教材到考试制度都是 Windows ONLY。到底怎么回事?我们是不是被愚弄了?我们是不是被当成白痴了?


_________________
http://lee.youxu.info/


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-06-06 11:00 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
main 有返回值主要是因为复杂程序可能会互相调用,它们要互相通信,所以有返回值表示“状态”或“执行结果”。另外跟Linux 下强大的管道、重定向(那个破 Win 没有这么复杂的东东)功能也是有关的。

一般 main 中的 0 表示“正常”,1 表示“异常”。

其它函数内,可以自定义。比方说

代码:
int valid isbn()
{
}



返回 0 表示 isbn 是合法的, 1 表示不合法的。


另外,为什么 VC 默认 main() 无返回并且 main 内也是空呢?主要是因为 Windows 下的命令行破得不能再破,所以 main 这样定义也就不足为奇。


简单点说,Windows 系统技术应用比不上 Linux ,这也就是,为什么我费那么大力气对别人说“Linux 对于开学和学习的人来说,绝对是首选平台,也是次选平台”。


_________________
http://lee.youxu.info/


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-06-06 11:03 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
http://www.shuge.org/share/project/gentoo_wiki/index.php?title=%E5%9F%BA%E6%9C%AC%E5%BA%94%E7%94%A8


编译型语言 C

想入门,有三本书是必看的。
《C 程序设计语言》
《Linux 程序设计》
《Unix 环境高级编程》


_________________
http://lee.youxu.info/


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2008-06-06 12:58 
头像

注册: 2006-05-19 9:54
帖子: 1822
地址: Shanghai
送出感谢: 2
接收感谢: 11
flyinflash 写道:
main 有返回值主要是因为复杂程序可能会互相调用,它们要互相通信,所以有返回值表示“状态”或“执行结果”。另外跟Linux 下强大的管道、重定向(那个破 Win 没有这么复杂的东东)功能也是有关的。

一般 main 中的 0 表示“正常”,1 表示“异常”。

另外,为什么 VC 默认 main() 无返回并且 main 内也是空呢?主要是因为 Windows 下的命令行破得不能再破,所以 main 这样定义也就不足为奇。

简单点说,Windows 系统技术应用比不上 Linux ,这也就是,为什么我费那么大力气对别人说“Linux 对于开学和学习的人来说,绝对是首选平台,也是次选平台”。


才不是破的不能再破呢
小时候没配置过autoexec.bat?
select命令和errorlevel没用过?
早在dos年代就有取得返回值概念了
不强制int main()标准,从turbo c开始就是了,比ms c还要早呢
这仅仅是编译器开发者的问题,不要抱着个os不放了...


_________________
ニンニク入れますか?
x60 with gentoo


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2008-06-06 23:54 
头像

注册: 2008-04-25 20:46
帖子: 5
地址: 广西
送出感谢: 0 次
接收感谢: 0 次
main 的返回值0是返回给操作系统的,告诉操作系统程序正确返回,如果返回1则代表程序出错返回。


_________________
Ubuntu


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2008-06-10 16:17 
头像

注册: 2008-05-09 14:14
帖子: 249
送出感谢: 0 次
接收感谢: 0 次
学习一下,我也一直有这个疑问的。


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2008-06-11 21:11 

注册: 2007-10-17 12:18
帖子: 154
地址: GZ, China
系统: Win8/Mac OS X 10.8.3
送出感谢: 0 次
接收感谢: 0 次
main()的类型不推荐是void的


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2008-06-11 21:39 
头像

注册: 2008-03-23 0:39
帖子: 769
送出感谢: 0 次
接收感谢: 4
看书的时候要仔细呀


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 13 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译