[讨论]关于 Gcc 编译 C main 返回值的问题

软件和网站开发以及相关技术探讨
回复
头像
liuxuwen
帖子: 63
注册时间: 2007-10-22 21:48
来自: Hell Mainland
联系:

[讨论]关于 Gcc 编译 C main 返回值的问题

#1

帖子 liuxuwen » 2008-06-01 16:55

代码: 全选

#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 行吗?

顺便問一下,在论坛发帖如何让代码语法突显?
头像
liuxuwen
帖子: 63
注册时间: 2007-10-22 21:48
来自: Hell Mainland
联系:

课本、老师都误人子弟啊

#2

帖子 liuxuwen » 2008-06-01 18:04

课本和老师都是用的 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 次。
头像
stlxv
论坛版主
帖子: 8275
注册时间: 2006-05-03 0:39
来自: المريخ

#3

帖子 stlxv » 2008-06-01 18:18

顺便答一下:论坛无语法突显功能。

另外,返回0,代表程序运行成功。
PHP是最好的语言!不服来战!
头像
liuxuwen
帖子: 63
注册时间: 2007-10-22 21:48
来自: Hell Mainland
联系:

#4

帖子 liuxuwen » 2008-06-01 18:23

谢谢回答。
头像
liuxuwen
帖子: 63
注册时间: 2007-10-22 21:48
来自: Hell Mainland
联系:

void 返回值的作用

#5

帖子 liuxuwen » 2008-06-01 18:34

返回值为 0,表示正确执行;非 0,执行有误。

可以用

代码: 全选

# echo $?
查看上个程序执行的返回值。

也可用

代码: 全选

          //假设编译出的可执行程序为 power
# ./power && ls    //如果 ls 被执行,说明power 正确执行。&&为并
# ./power || ls      //如果ls未执行,说明power正确执行。||为非
查看程序是否正确执行,
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28

#6

帖子 flyinflash » 2008-06-06 10:53

写法有几种

代码: 全选

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。到底怎么回事?我们是不是被愚弄了?我们是不是被当成白痴了?
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28

#7

帖子 flyinflash » 2008-06-06 11:00

main 有返回值主要是因为复杂程序可能会互相调用,它们要互相通信,所以有返回值表示“状态”或“执行结果”。另外跟Linux 下强大的管道、重定向(那个破 Win 没有这么复杂的东东)功能也是有关的。

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

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

代码: 全选

int valid isbn()
{
}

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


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


简单点说,Windows 系统技术应用比不上 Linux ,这也就是,为什么我费那么大力气对别人说“Linux 对于开学和学习的人来说,绝对是首选平台,也是次选平台”。
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28

#8

帖子 flyinflash » 2008-06-06 11:03

http://www.shuge.org/share/project/gent ... 4%E7%94%A8


编译型语言 C

想入门,有三本书是必看的。
《C 程序设计语言》
《Linux 程序设计》
《Unix 环境高级编程》
头像
Strange
帖子: 1824
注册时间: 2006-05-19 9:54
来自: Shanghai

#9

帖子 Strange » 2008-06-06 12:58

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
头像
alphauslee
帖子: 5
注册时间: 2008-04-25 20:46
来自: 广西

#10

帖子 alphauslee » 2008-06-06 23:54

main 的返回值0是返回给操作系统的,告诉操作系统程序正确返回,如果返回1则代表程序出错返回。
Ubuntu
头像
hyxuzhimin
帖子: 249
注册时间: 2008-05-09 14:14

#11

帖子 hyxuzhimin » 2008-06-10 16:17

学习一下,我也一直有这个疑问的。
Cris
帖子: 154
注册时间: 2007-10-17 12:18
系统: Win8/Mac OS X 10.8.3
来自: GZ, China

#12

帖子 Cris » 2008-06-11 21:11

main()的类型不推荐是void的
头像
ChenFengyuan
帖子: 770
注册时间: 2008-03-23 0:39

#13

帖子 ChenFengyuan » 2008-06-11 21:39

看书的时候要仔细呀
回复