| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1100 人关注过本帖
标题:又讨论int main() 自己试验了一下 发现 貌似VC2008里面void main()相当于返 ...
只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
结帖率:100%
收藏
 问题点数:0 回复次数:9 
又讨论int main() 自己试验了一下 发现 貌似VC2008里面void main()相当于返回值总是0 gcc里void main()是不设置返回值
rt

VC是release gcc是-O2

不设置返回值就是这个样子

 ./a.exe ;echo $?
我用int哦
打一个数-1
11

程序代码:
#include <stdio.h>

void main(void)
{
    int i = 0;
    printf("我用int哦\n");
    printf("打一个数%d\n", i = -1);
}



最后一个语句是函数调用 那么 返回值就是这个函数的返回值 运算的话应该也类似 然后 gcc就让这个返回值作为程序的返回值了

程序代码:
#include <stdio.h>

void main(void)
{
    int i = 5;
    int j = 10;
    i = i * j;
}



如果是这样的代码 不开优化(优化一开这些都变成垃圾代码被优化没了。。) 效果如下

 ./a.exe ;echo $?
50

以上的是bash打返回值的玩意 不过这个测试是完全在windows下进行的。。


[ 本帖最后由 zklhp 于 2012-8-9 13:59 编辑 ]
搜索更多相关主题的帖子: void release 
2012-08-09 13:39
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
哦...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2012-08-09 13:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
微软自己说了,在main()中return n等效于调用exit(n),它在编译代码时就是这么做的。按照早期的做法,不明确返回的就返回0,于是默认exit(0),这很正常。倒是gcc的这种结果有点不可理解。

授人以渔,不授人以鱼。
2012-08-09 13:46
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
void就是说 函数不返回返回值 所以叫无返回值 那么 gcc不设置 是正常的
2012-08-09 13:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
那只能说gcc求快不做安全保护措施。
收到的鲜花
  • a1a2012-08-10 08:59 送鲜花  -2朵  

授人以渔,不授人以鱼。
2012-08-09 14:03
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
void main (void)

这是错误滴

编译的时候都会加上 -Wall  选项

The quieter you become, the more you can hear
2012-08-09 14:30
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
error是错误 warning是警告 就好像 吸烟有害健康 一样 你听 就是错误 不听 就是耳旁风
2012-08-09 14:58
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
其实我一直都觉得(不知道对不对哈)...
int main的返回值是给操作系统用的...这个返回值对自己的程序本身没什么用处也没有影响...
而具体的操作数表示什么含义,要去查unix手册

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2012-08-09 21:16
jokerskill
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:392
专家分:554
注 册:2012-3-4
收藏
得分:0 
都非常好
2012-08-09 21:36
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
void main 在 C 语言里是未定义行为,在 C++ 里是未明确行为。

如果是未定义,那么什么行为都是可以的。
如果是未明确,只要明确了就行。微软手册里明确了,应该 gcc 的手册也明确了才对。而且我觉得这两种行为都是可理解的。
2012-08-10 00:02
快速回复:又讨论int main() 自己试验了一下 发现 貌似VC2008里面void main()相当 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020758 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved