| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6458 人关注过本帖, 1 人收藏
标题:求解有关主函数返回值问题!!
只看楼主 加入收藏
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
回复 28楼 zklhp
恩,看出来了,怎么称呼啊,兄弟?
鄙人姓蔡~

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2012-04-11 21:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其实下面的话已经说得很清楚了:
The main function is not predefined by the compiler. It must be supplied in the program text.

授人以渔,不授人以鱼。
2012-04-11 21:58
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
这帖作废了 看下面的。。


[ 本帖最后由 zklhp 于 2012-4-11 22:04 编辑 ]
2012-04-11 22:00
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用waterstar在2012-4-11 21:54:42的发言:

恩,看出来了,怎么称呼啊,兄弟?
鄙人姓蔡~

无名小卒而已
2012-04-11 22:01
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用waterstar在2012-4-11 21:53:39的发言:

楼上有点误区,其实main函数并不是唯一主函数,相反你可以自己定义主函数,在链接开关中修改下/BASE的名字就行了,不过,修改之后,程序开始并不会初始化堆栈,所以不能分配内存。

我觉得是这样 C规范里说C语言从main()开始 对于一个开发者来说 理想的状况就是只关心从main()开始到结束的代码 至于初始化 我觉得正常情况应该不关心才对 而且这个初始化的实现不一样罢

至于上面说的 我倾向于认为这个属于操作系统的一种实现方式而非C语言 也就是已经超出了本贴的讨论范围了 一个刚想的例子:要是其他语言用这个方法改入口点 和main()有什么关系呢

个人意见仅供参考

其实楼主如果懂调试的话自己哪调试器跟一下所在平台的初始化代码就知道了 不过这需要一定的水平

信服程度 自己调试得到的>代码>手册或书本>别人说的>自己瞎猜的
2012-04-11 22:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
语言是规定实现行为的,它可能规定必须表现为如何,或绝对不能如何,但不会规定实现如何满足其规定,即规定结果而非手段。在不同的系统平台,实现C语言规定的行为有各不相同的手段,但都必定严格遵守“必须”及“不能”,其余的,有一定的自由度。某种实现之所以能够如此,唯一的解释是规范并非“不许”。

何况,文档的说法相当清晰:“main()函数并非是编译器预设的,它必须由程序文本提供”。也就是说,没有一种编译器规定了程序的入口函数必须是main()或别的什么,而这句话出现在“微软特定”内容之外,亦即是普遍的。

[ 本帖最后由 TonyDeng 于 2012-4-11 22:10 编辑 ]

授人以渔,不授人以鱼。
2012-04-11 22:08
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
忍不住再说最后一句

以上我们说的很多东西属于Win平台下的C语言初始化的具体实现 如果你不学Windows编程的话这些不需要会 当然也可能直接看不懂 这都没关系

我们说这些的目的是 在一个特定的平台下探究一个C语言程序的初始化流程 讨论main()的执行方式细节 说白了 帮助你理解你的疑惑。。

我该说的都说了 希望能帮上你。。


2012-04-11 22:11
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用TonyDeng在2012-4-11 22:08:24的发言:

语言是规定实现行为的,它可能规定必须表现为如何,或绝对不能如何,但不会规定实现如何满足其规定,即规定结果而非手段。在不同的系统平台,实现C语言规定的行为有各不相同的手段,但都必定严格遵守“必须”及“不能”,其余的,有一定的自由度。某种实现之所以能够如此,唯一的解释是规范并非“不许”。

何况,文档的说法相当清晰:“main()函数并非是编译器预设的,它必须由程序文本提供”。也就是说,没有一种编译器规定了程序的入口函数必须是main()或别的什么,而这句话出现在“微软特定”内容之外,亦即是普遍的。

膜拜ing
2012-04-11 22:12
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
微软编译器的操作,是根据程序文本里是main()还是wmain()、WinMain()分别调用不同的链接模式,对前两者,属于控制台程序模式,分别对应ANSI和宽字符编码,对后两者,属于窗口GUI模式(也就是说wmain()可以被两种模式共用)。不同的编译链接模式,才是决定程序执行具体步骤的,如果程序文本中对此不明确,就要看链接器的参数设置了,这点zklhp版主从汇编代码中也看出来了,确实是这样的。

授人以渔,不授人以鱼。
2012-04-11 22:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
由于程序实际上并不必须总由main()向调用者返回信息(微软的实现实际上是通过exit()函数返回),所以探讨main()的返回值必须如何如何其实是多余的,因为在根本上,程序就不是由这个叫main()的函数做入口,在真正的执行机器码中,进入main()函数之前,就先有大量的代码在做铺设,那些代码才是真正设置如何接收返回值的。这也是微软编译器支持void main()声明的根本原因。

授人以渔,不授人以鱼。
2012-04-11 22:24
快速回复:求解有关主函数返回值问题!!
数据加载中...
 
   



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

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