設計編譯程序注意的問題
呵呵,找一本好書吧。我不能完全給你寫清楚,"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、實際情況比我說的還要復雜得多。所以,能玩編譯器的人不是很多,商品化的編譯器更是鳳毛麟角。