深入认识Turbo C编译器[转]
1 编译器 有谁真正的理解过一个编译器呢?许多人认为TC很简单很落后,但是即便是这样简单的工具,到底有几个人真正的深入理解了呢?一个简单的编译器都不能理解,如何能成为高手,如何能深入的使用更加高级的工具呢?不要以为自己使用的是VC就很了不起,因为使用这样傻瓜化的工具只能让你看不到事物的本质。接下来我们就来深入的认识Turbo C编译器。 广义的编译器,包括了代码编译器(compiler)、目标文件链接器(linker)、库文件管理工具(如tc的tlib、gcc的ar)、编译驱动工具(如VC的NMake、gcc的make)、ANSI c/c++标准的头文件和库文件、扩展的头文件和库文件、集成开发环境(IDE)等等与编译相关的工具。 狭义的编译器,则仅指代码编译器(compiler)。 对于一个广义的编译器来说以下几个部分是必备的:1.compiler,2.linker,3.系统提供的头文件和库文件。下面分别介绍compiler和linker。 compiler只负责将源代码(.c/.cxx/.cpp文件)编译成为目标文件(.o/.obj文件)。编译过程的输入是源文件,包括自己书写的.c和.h以及系统提供的.h文件,编译的输出是目标文件。需要强调的一点时,在compile阶段,只处理源文件,所以不需要库文件和额外的目标文件的参与,因此,只要代码在语法上没有错误,compile就一定能产生目标文件。 linker的功能是将目标文件进行装配,将浮动的地址变为确定的地址,这个工作是通过修改目标文件的重定位项来实现的,其具体的过程可以参考《Linker & loader》这本书,这是一本详细介绍linker和loader的好书。总之,link这一阶段处理的输入是目标文件,其输出是可执行文件或动态库。 任何一个编译器都会提供库文件和与之对应的头文件,C/C++编译器一般都提供ANSI C/C++的库和相应的头文件。 从现在起我们就需要建立起一个概念,就是广义的编译过程,实际上是由编译和链接两个基本步骤组成的,如果能深刻的理解这两个步骤,就是一大进步了。 在编译器里,有一些默认的规定:bin目录用于存放compiler、linker等工具,include目录用于存放头文件,lib目录用存放库文件,大多数的编译器的目录就是按这个来组织的。 2 Turbo C 2.0.1安装目录结构 接下来看Turbo C为我们提供了些什么(请到我的网站下载我动手制作的改良版TC编译器)。 (1) bin目录中: CPP.EXE 是一个C语言预处理工具,就是负责对源代码进行预编译处理。 TCC.EXE 是一个C语言的编译器,可以将代码编译为目标文件,并且能自动调用tlink链接生成可执行文件 TAS
相关文档:
C 程序有下面几个部分组成:
1 正文段:这是CPU 执行的机器指令的部分。通常正文段是可以共享的,所以即使是频繁执行的程序(如:文本编辑器)在存储器上也只有一个副本。另外正文段常常是只读的,以防止程序因为意外而修改其自身的指令。
2 初始化数据段:通常将此段称为数据段,它包含了程序 ......
PART (1)
/*
===============================================
经典排序思想,并用C语言指针实现排序算法
================================================
*/
/*
=============================================================================
相关知识介绍(所有定义只为帮助读者理解相关概念,并非严格定 ......
当要建立线程等时,在Linux下,用文本编辑,在键入“g++ -lpthread”.......“可以把库pthread引入”,编译通过。现在想用eclipse,但是默认情况下,引入不了pthread。会报“undefined reference to phread_create”等错误。
解决方法:可以在project中好到properties
在里面的&ldquo ......
GCC 中文手册
http://www.nbfan.com/forum/dispbbs....&ID=1433&page=1
GNU make 指南
http:/ ......
alloc.h
brk
【功能】更改数据段空间的分配
【原型】int brk(void *endds)
【位置】alloc.h
【说明】将程序数据段的顶部设置为endds所指向的内存位置。调用成功之后,返回0。如果调用失败则返回-1,同时设置errno。
【参见】coreleft
calloc
【功能】分配内存。
【原型】void *calloc(size_t nelem,size_t elsize) ......