分页: 1 / 1
[讨论]关于 Gcc 编译 C main 返回值的问题
发表于 : 2008-06-01 16:55
由 liuxuwen
代码: 全选
#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 行吗?
顺便問一下,在论坛发帖如何让代码语法突显?
课本、老师都误人子弟啊
发表于 : 2008-06-01 18:04
由 liuxuwen
课本和老师都是用的 void main(),在 VC++ 6.0 中也能正确编译。真是误人子弟阿!
刚搜索了一下,C 语言中 main 函数的正确写法只有以下两种正确写法:
1、
2、
代码: 全选
int main( int argc, char *argv[] )
后面记得要加
发表于 : 2008-06-01 18:18
由 stlxv
顺便答一下:论坛无语法突显功能。
另外,返回0,代表程序运行成功。
发表于 : 2008-06-01 18:23
由 liuxuwen
谢谢回答。
void 返回值的作用
发表于 : 2008-06-01 18:34
由 liuxuwen
返回值为 0,表示正确执行;非 0,执行有误。
可以用
查看上个程序执行的返回值。
也可用
代码: 全选
//假设编译出的可执行程序为 power
# ./power && ls //如果 ls 被执行,说明power 正确执行。&&为并
# ./power || ls //如果ls未执行,说明power正确执行。||为非
查看程序是否正确执行,
发表于 : 2008-06-06 10:53
由 flyinflash
写法有几种
代码: 全选
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。到底怎么回事?我们是不是被愚弄了?我们是不是被当成白痴了?
发表于 : 2008-06-06 11:00
由 flyinflash
main 有返回值主要是因为复杂程序可能会互相调用,它们要互相通信,所以有返回值表示“状态”或“执行结果”。另外跟Linux 下强大的管道、重定向(那个破 Win 没有这么复杂的东东)功能也是有关的。
一般 main 中的 0 表示“正常”,1 表示“异常”。
其它函数内,可以自定义。比方说
代码: 全选
int valid isbn()
{
}
返回 0 表示 isbn 是合法的, 1 表示不合法的。
另外,为什么 VC 默认 main() 无返回并且 main 内也是空呢?主要是因为 Windows 下的命令行破得不能再破,所以 main 这样定义也就不足为奇。
简单点说,Windows 系统技术应用比不上 Linux ,这也就是,为什么我费那么大力气对别人说“Linux 对于开学和学习的人来说,绝对是首选平台,也是次选平台”。
发表于 : 2008-06-06 11:03
由 flyinflash
http://www.shuge.org/share/project/gent ... 4%E7%94%A8
编译型语言 C
想入门,有三本书是必看的。
《C 程序设计语言》
《Linux 程序设计》
《Unix 环境高级编程》
发表于 : 2008-06-06 12:58
由 Strange
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不放了...
发表于 : 2008-06-06 23:54
由 alphauslee
main 的返回值0是返回给操作系统的,告诉操作系统程序正确返回,如果返回1则代表程序出错返回。
发表于 : 2008-06-10 16:17
由 hyxuzhimin
学习一下,我也一直有这个疑问的。
发表于 : 2008-06-11 21:11
由 Cris
main()的类型不推荐是void的
发表于 : 2008-06-11 21:39
由 ChenFengyuan
看书的时候要仔细呀