《程序员的自我修养》中以 hello,world 引出的问题你知道几个?C/C++ code#include stdio.hint main(){prin
《程序员的自我修养》中以 hello,world 引出的问题你知道几个?
C/C++ code#include <stdio.h>int main(){ printf("Hello World\n"); return 0;}
1. 程序为什么要被编译器编译了之后才可以运行?
2. 编译器在把C语言程序转换成可以执行的机器码的过程中做了什么,怎么做的?
3. 最后编译出来的可执行文件里面是什么?除了机器码还有什么?它们怎么存放的,怎么组织的?
4. #include<stdio.h>是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?它怎么实现的?
5. 不同的编译器(Microsoft VC, GCC)和不同的硬件平台(x86, SPARC, MIPS, ARM),以及不同的操作系统(Windows,Linux, UNIX, Solar), 最终编译出来的结果一样吗?为什么?
6. Hello World 程序是怎么运行起来的? 操作系统是怎么装载它的? 它从哪儿开始执行,到哪儿结束?main函数之前发生了什么? main函数结束以后又发生了什么?
7. 如果没有操作系统,Hello World可以运行吗?如果要在一台没有操作系统的机器上运行Hello World需要什么?应该怎么实现?
8. printf是怎么实现的?它为什么可以有不定数量的参数?为什么能够在终端上输出字符串?
9. Hello World程序在运行时,它在内存中是什么样子的?
[解决办法][解决办法]那本书我也看了,看了几十页然后就觉得看的很吃力
[解决办法]求人不如求己,如果楼主真的想深入的了解计算机在我们编程时做了一些什么,建议你买一本《深入理解计算机系统》,你可以google一下,很经典的教材。
[解决办法]看你以后做什么方向了,感觉这些是嵌入式方面的
[解决办法]你问的问题算是计算机的基本问题了。建议看看楼上说的深入理解计算机系统这本书,先从总体上理解一下操作系统的问题。
关于你这几个问题,编译程序为了变成机器可以执行的二进制文件。二进制文件也有格式的,不同平台可能还不一样。但大体分为代码段,数据段等,这样可以加载到内存中,操作系统也是断页式管理内存的,这样就方便内存管理。包含头文件,在链接的时候会把用了头文件中的代码链接到可执行程序中,这地方有动态链接和静态链接两种方式。
编译的可执行程序在linux和windows下应该格式还是有差别的。大体还是按段组织数据的。没有操作系统肯定执行不了吧。执行前可能操作系统创建进程,分配内存空间,然后会进入main函数吧。
你的问题比较多,还是多看书,以后会明白的。有的我忘了,说的也可能不太对吧,总之还得多看书。
[解决办法]来围观一下,你提的问题如果不对语言很了解是很难回答的。
[解决办法]so ga!好问题!
[解决办法]若干年后,看我是否能回答
[解决办法]如果你按照zhao老师经常贴出的那串学习顺序,学完的话,这些问题应该小case了
[解决办法]我也买了这本书,也在学习中。其研究的深度真的很让我佩服。我也在向那个方向努力着。。关于那些个问题。也只是了解个大概要真的详细说来,说不上几个。。。所以也就不废话了。
[解决办法]LS 指的是这个吧。。哈哈
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
英语也是一门计算机语言的说。
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
[解决办法][解决办法][解决办法]那个书就是大学基础课的教材
如果你觉得很深很难,要么就不是计算机专业的,要么就是大学基础课没学好
[解决办法]恩,楼主加油。。。
[解决办法]
嘻嘻。。看了 深入理解计算机系统。。。 貌似能答上几个问题
[解决办法]
[解决办法][解决办法]赵老师很历害的
[解决办法]很有意义的帖子,很有意义的问题~~~
[解决办法]不错了,有这个觉悟我觉得已经有做一个程序员的资格了
编译原理
windows核心编程
这两本书会告诉你 程序编译,链接 C运行库,进程线程==方面的知识,可以让你知道main函数的起始和终结以及运行到底怎么回事,
至于其他的得看操作系统了。
[解决办法]1.因为要编译生成计算机可以理解的语言,1和0
2.翻译成机器语言 具体怎么做 请参考编译原理
3.代码段和数据段
4.因为用到了printf
5.应该不一样 不知道为什么
6.实在不知
7.可以,没有操作系统那就需要自己来调用显卡中断,往显存写数据,打印到显示器。
8.因为printf函数的格式是printf(...),所以可有不定数量参数。
9.知道的很模糊 无法表达。
[解决办法]我知道的太少了。。。
[解决办法]一步步来吧,这样的书籍不是有点语言基础就能看懂的
[解决办法]正在看这本书。
[解决办法]基础理论还是要学牢靠啊。
[解决办法][解决办法]我惊喜地发现我会一大半耶!
[解决办法]你要是搞OS kernel,搞嵌入式底层,搞驱动的,了解些这方面还行。(搞编译器就不用想了,天朝没有搞编译器的机会)
你要是搞应用软件,搞数据库,搞web service,我只能说你研究这些纯是蛋疼~~
去搜个台湾人training,叫《深入浅出hello world》,这几个问题连入门级别都算不上
[解决办法]嗯,<程序员的自我修养>这本书我也看了一点点,对于这些问题我也有疑问,我也很感兴趣,无奈非科班出身,计算机功底不够,目前正在看<深入理解计算机系统>打打功底
[解决办法]你的很多问题应该是和操作系统、硬件、编译器等有关的,有些细节会因平台的不同而有差异,问这些问题也应该看自己现在所处的位置,若是刚入门的程序员何必问这么清楚,就算有人讲清楚了,过两天可能也就忘了,若果自己已经不是菜鸟了,这些问题在工作中应该都已经遇到了,慢慢不就明白了吗。。。
[解决办法]1. 程序为什么要被编译器编译了之后才可以运行?
C/C++ code没啥,计算机比较笨,看不懂用高级语言写出来的程序