差分表示


#freeze
** lcc 
** lcc メモ

lcc は

lcc, A Retargetable Compiler for ANSI C~
https://sites.google.com/site/lccretargetablecompiler/

で配布されてるANSI-Cコンパイラで、設計&実装を解説した書籍もでているよう
です。というか書籍のサンプル/教材としての側面が強そうに思えます。
(実用品なら作りこむべきところを簡易(単純)なままにしているし)

ライセンスはわりと緩めだったり古くからソース公開されてたりするためか、
lcc 派生(フリー&商用)コンパイラの lcc-win32 や Pelles-C 
が出ていたりします。

lcc-winやPelles-C は結構作り込まれていますが、もともとの lcc 自体はすごく
pure な ansi-c89 コンパイラのままです。c99のごく一部 //コメントと long long
は追加されていますが、long long は x86用だと 32ビット整数(alpha用は64bit)
だし、他は inline さえ無い状態です。

lcc自体は リンカやライブラリアン、標準ライブラリを提供しておらず、それらは
既存のものを流用しており、コンパイラドライバではそれらをソースに直書きして
います。unix系の場合はos標準搭載のcコンパイラに寄生で もとより構成がある
程度決まってるので問題少なそうですが、win用はvc(5)だけで、今使おうとすると
手直しが必要... 

~

で、Winではコンパイラ/ヴァージョンごとフォルダ構成・設定
オプションの幅があるのでソース直書でなく定義ファイルを読み込むように修正
してみました。~

[[これ>http://www.6809.net/tenk/html/lib/lcc42mod20130620.zip]]
(ソースのみ 要コンパイル)

寄生対象として、vc7.1~VC11、borland-c (5.5.1+tasm32|jwasm) が可能です.~
lcc自体のコンパイルは各種 Cコンパイラで可能ですが、lccが生成するアセンブラソースや C ABI の都合、寄生対象は ms 互換の必要あり。
でも dll(import/export)未対応なので vc の Express版は 寄生先としては不可です。
一応無料ツールのみとしては bcc32 5.5.1 と JWasm の組み合わせは可能でした。

できた lcc で何かをコンパイルする時、新し目のVCだとヘッダでinlineや拡張で
通らないことがあります。vc7.1 や bcc 5.5.1 のような古めのコンパイラの
ほうが無難そうです。

※ ヘッダ寄生の辻褄合わせはたいてい #define マクロ定義で行いますが、
long long については たとえ32bitでも認識してくれないと long long を
使った宣言のエラー回避できないので必須だったのだな、と納得でした。