免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: junenggai
打印 上一主题 下一主题

高手必看:程序出了main()入口外还有其它的吗 [复制链接]

论坛徽章:
0
51 [报告]
发表于 2006-04-06 12:04 |只看该作者
原帖由 0521 于 2006-4-5 13:17 发表


举个简单的例子,如果你想自己写操作系统,难道要连接表准的函数库吗?这些函数库可是操作系统相关的。



这个说的比较好。

论坛徽章:
0
52 [报告]
发表于 2006-04-06 12:09 |只看该作者
其实上面的牛人们都知道什么叫程序的开始,只是表达的方式不一样而已。

很显然,可以用编辑器写一个a.out,虽然我不知道具体的东西,但是这些都只是约定而已,而cc也紧紧是对.c生成符合约定的东西。而C标准以及OS告诉CC这个约定是什么。
就象标准输入和标准输出,对操作系统来说,它什么也不知道。所有的fd都是平行的,虽然可能各自有各自的特点。而在C中规定stdin stdout. 问题类似: 标准输入可以默认是/home/in吗

论坛徽章:
0
53 [报告]
发表于 2006-04-06 12:16 |只看该作者
各种编译器可能都不一样,如果喜欢的话,估计很多都可以自己指定一个(vcc++ gcc是可以的),所谓的入口不过就是一个地址而已么

单片机里面的
ajmp $100
org 100
;start
mov ....

这里的start就是主程序入口地址

你也可以说那第一个执行的指令是入口,那上面的ajmp $100是入口的指令了

不过从另一方面看constructor虽然是先于main执行,但并不是入口

我的理由是你可以指定一个不叫main的函数为入口(entry point),但是你不能指定一个constructor为entry point

因为如果一个constructor可以做主程序做的一切,那么何不就把他做成一个main()呢?

所以constructor不是入口

入口可以不叫main,但是即便改叫别的名字,大多数情况下意义仍旧一样

除操作系统或其他特殊情况,没必要特殊化

论坛徽章:
0
54 [报告]
发表于 2006-04-06 13:38 |只看该作者
原帖由 john3851 于 2006-4-6 09:22 发表


真是强啊,我面试也遇到类似问题,问ANSI C的全局变量,局部变量,用MALLOC装载的动态数据空间,分别是什么时候初始化(如果程序里在定义这些变量是就进行初始化),这些变量分别存放在什么地方(我觉得这是操 ...


我也不是很懂,试着回答一下,说错了大家指正。
全局变量在main执行之前初始化,局部变量和malloc的动态空间编译器不初始化,由程序员自己初始化为需要的值。
全局变量分配在数据段,局部变量分配在堆栈,malloc从堆中分配内存。

论坛徽章:
0
55 [报告]
发表于 2006-04-06 15:21 |只看该作者
原帖由 flw 于 2006-4-6 10:30 发表

C++ 不是这样的,C++ 的全局变量是在 main 之前初始化的,因此,它们的构造函数也会在这之前运行。



请写一个不包含main的C++程序看看?(另,别使用编译器指定别的主函数)。允许你写无限多个全局变量

论坛徽章:
0
56 [报告]
发表于 2006-04-06 15:28 |只看该作者
原帖由 albcamus 于 2006-4-6 09:33 发表
筒子们哪, 这个贴子还是成功滴! 看tzwolf yinheng8066 二位高人的处女贴都发在这里了, 可见是有技术含量的讨论



汗,就一个字,我也陪灌,水了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
57 [报告]
发表于 2006-04-06 15:30 |只看该作者
原帖由 ouland 于 2006-4-6 15:21 发表



请写一个不包含main的C++程序看看?(另,别使用编译器指定别的主函数)。允许你写无限多个全局变量

请您先了解一些《逻辑》有关的常识,OK?

论坛徽章:
0
58 [报告]
发表于 2006-04-06 15:30 |只看该作者
长见识啊~~~

论坛徽章:
0
59 [报告]
发表于 2006-04-06 15:40 |只看该作者
原帖由 flw 于 2006-4-6 15:30 发表

请您先了解一些《逻辑》有关的常识,OK?


虚心请教一下,能否说的详细一些?

我们现在说的是入口,请从此问题开始

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
60 [报告]
发表于 2006-04-06 15:46 |只看该作者
原帖由 ouland 于 2006-4-6 15:40 发表


虚心请教一下,能否说的详细一些?

我们现在说的是入口,请从此问题开始

我说的是,
C++ 中,全局对象的构造函数是在 main 之前执行的。
这句话最早出现在这个帖子的二楼,换言之,这个帖子从那时起,其实已经回答清楚了。
只不过后来大家还在继续讨论,我就多说了几句。

注意,我并没有说,C++ 程序可以不要 main。
所以你前面所说的
请写一个不包含main的C++程序看看?(另,别使用编译器指定别的主函数)。允许你写无限多个全局变量
针对的不是我原先的命题。
你犯了《逻辑》里面的“偷换概念”的错误。
希望你能认识到这个问题,然后我才有和你讨论的必要。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP