lcc メモlcc は
lcc, A Retargetable Compiler for ANSI C で配布されてる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ではコンパイラ/ヴァージョンごとフォルダ構成・設定
オプションの幅があるのでソース直書でなく定義ファイルを読み込むように修正
してみました。 これ (ソースのみ 要コンパイル)
寄生対象として、vc7.1~VC11、borland-c (5.5.1+tasm32|jwasm) が可能です. できた lcc で何かをコンパイルする時、新し目のVCだとヘッダでinlineや拡張で 通らないことがあります。vc7.1 や bcc 5.5.1 のような古めのコンパイラの ほうが無難そうです。 ※ ヘッダ寄生の辻褄合わせはたいてい #define マクロ定義で行いますが、 long long については たとえ32bitでも認識してくれないと long long を 使った宣言のエラー回避できないので必須だったのだな、と納得でした。 |