Chinaunix首页 | 论坛 | 博客
  • 博客访问: 243103
  • 博文数量: 52
  • 博客积分: 285
  • 博客等级: 二等列兵
  • 技术积分: 585
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-25 23:38
文章分类

全部博文(52)

文章存档

2013年(43)

2012年(9)

我的朋友

分类: C/C++

2013-07-16 00:17:21

   摘抄自《程序员的自我修养:链接、装载与库》(俞甲子 石凡 潘爱民 著)

   毫无疑问,"Hello World"对于程序员来说肯定是如雷贯耳,就是这样一个简单的程序,带领了无数的人进入了程序的世界。简单的事物背后往往又蕴涵着复杂的机制,如果我们深入思考一个简单的"Hello World"程序,就会发现很多问题看似很简单,但实际上我们并没有一个非常清晰的思路;或者在我们脑海里有着模糊的印象,但真正到某些细节的时候可能又模糊不清了。比如对与C语言编写的Hello World程序:

  #include

   int main()
  {
    printf("Hello World\n");
    return 0;
  }
   对于下面这些问题,你的脑子里能够马上反应出一个很清晰有很明确的答案吗?

  • 程序为什么要被编译器编译了之后才可以运行?
  • 编译器在把C语言程序转换成可以执行的机器码的过程中做了什么,怎么做的?
  • 最后编译出来的可执行文件里面是什么?除了机器码还有什么?它们怎么存放的,怎么组织的?
  • #include 是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?它怎么实现的?
  • 不同的编译器(MicrosoftVC,GCC)和不同的硬件平台(x6,SPARC,MIPS,ARM),以及不同的操作系统(Windows,Linux,UNIX,Solaris),最终编译出来的结果一样吗?为什么?
  • Hello World程序是怎么运行起来的?操作系统是怎么装载它的?它从哪儿开始执行,到哪儿结束?main()函数之前发生了什么?main函数结束以后又发生了什么?
  • 如果没有操作系统,Hello World可以运行吗?如果要在一台没有操作系统的机器上运行Hello World需要什么?应该怎么实现?
  • printf是怎么实现的?它为什么可以有不定数量的参数?为什么它能够在终端上输出字符串?
  • Hello World程序在运行时,它在内存中是什么样子的?
阅读(1753) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~