设计编译程序注意的问题
呵呵,找一本好书吧。我不能完全给你写清楚,"sting.h"的拼写已经有人说了。
简单地说,要理解几种文件:
A:源文件:例如汇编(asm)、c语言、cpp
B:目标文件
C:库文件(lib)
D:可执行文件
A经过编译器得到B,若干个B可以经过库管理程序得到C,C也可以通过库管理程序得到B(提取)
若干个B通过链接器可以得到D,但是比如strcmp是出现在C中的,但实际上链接器会到C中提取出strcmp所在的B,然后将这个B放入到你的D中。整过过程是一个求闭包的过程,具体参见《Linker and Loader》。
最后说说.h,其实.h本身并不是必要的,但是它可以减少人们的错误,减少重复的代码。
比如printf,你完全可以不include<stdio.h>,你就自己写上一行:
int printf(...);
然后你后面就是直接使用就好了,但是这样会有很多缺陷,这些缺陷可能只有你深刻地理解C语言本身的缺陷后才能明白,不多说了。
Ⅱ 我想开发一个编程语言,算法等等都没问题了,关键是如何把我的语言编译成EXE文件
1、其实这个过程比较复杂。很多高级语言都不是直接将源程序编译成机器码,而是将汇编语言作为目标语言,就是将源码翻译成等价的汇编代码,然后使用现有的汇编语言编译器将中间代码编译成PE格式文件。你没有必要再重复写一个汇编语言编译器,所以会省很多事。
2、即使翻译成汇编代码,也是有很多问题。一是汇编语言严重依赖硬件和平台,因此你需要根据需求,在不同平台上翻译不同的汇编代码;二是编译器的排错。一个编译器能够面对各种情况,无错误运行,本身就是一个奇迹;三是程序的优化问题,一个好的编译器要对生成的代码进行优化,否则编译出的程序不仅很大,而且运行效率低下;四是凡是程序设计语言,有必要给用户提供友好的调试环境,这个编起来也很复杂。
3、实际情况比我说的还要复杂得多。所以,能玩编译器的人不是很多,商品化的编译器更是凤毛麟角。