ネットを探すと結構Cコンパイラが配布されているようだ。 Win32 環境用に限ってもフリーのCコンパイラは
のようなものが見つかる。 もっとも窓アプリ作成に限定すると djgpp はコンソールアプリのみ 対応だし、watcom はまだ正式には配布されてないけれど。
で、ちょこっと触ってみたので各コンパイラについてメモ。
て、以前に書いた bccの使用メモ の修正/書き直し版。
とりあえず コンソールとWin/GUIの "hello warld" くらいはコンパイルしてみよう、
とは考えているのだけど・・・
ほぼ、ほとんど使い込まずにぱっと見で書いている部分があるので、
そこんとこ割り引いてみてやってください^^;)。
▼Borland C++, ▼Digital Mars C++, ▼Open Watcom, ▼LCC-Win32, ▼Gcc MinGW ( Dev-C++, Wide Studio, GDS2K), ▼おわり
Borland社 (一時 Inprase と社名変更していたが又戻った)が無料配布している C/C++コンパイラ。 製品であるRAD型の C++ Builder 5 中のコマンドラインのコンパイラやツールをパッケージにしたもの(IDEはついていない)。 また、少し古い型だがデバッガも別途無料配布されている(ただし、ユーザー登録が必要)。
※もしCDや昔ダウンロードしたものでインストールするパッケージの バージョンが v5.51以前(v5.5)ならば、不具合が修整された最新(v5.51)を 入手しなおしたほうがよいだろう。
無料配布は去年4月からだがCマガジン等の 雑誌付録のおかげでWin用のフリーCコンパイラといえば bcc になっているようにもみえる。 全角入りソースに対応してるし、日本語の参考資料(WEBページ)も他に比べれば断然あるし、増えていくし (CP/M時代のTurboPascalからの老舗なのでファン的ユーザも多そうに思う)。 入門的役割としては、16ビットDOS用のLSI-C86試食版からやっと代替わりした、と いう感じもある(Win95登場から4,5年立っていることを思うと)。
あと borland は delphi/
kylix,
J Builder,
の無料配布版を配布してたり(RADツール。ただし使用制限はきつめ)、
旧作である16ビットDOS 用のTurbo-Cや Turbo-Pascal も配布している。
#include <stdio.h> int main(void) { printf("へろ〜わーるど表示\n"); return 0; }
path c:\borland\bcc55\bin;%path%を実行する。
set include=c:\borland\bcc55\include;c:\borland\bcc55\include\psdk
bcc hello.cとして、コンパイル。できたら、hello.exe を実行。
bcc32.exe はコンソールアプリだけでなく、Windowsアプリケーションも作成可能。
ただし MFC(MS) や VCL,OWL(borland)
といったC++クラスライブラリは付いてこず、
標準では API/SDK レベルでのプログラミングのみとなる。
で、とりあえず、hello world をしてみる。といっても窓タイトルに出す単純なもの。 ソースはこれ
bcc32 -tW w_p_smp1.cでコンパイル(ソースとexe はこれ)。
sample 1 に、メニューで「ファイル」「ヘルプ」をつけてみただけのもの ( w_p_smp2.c, w_p_smp2.rc, resource.h。 圧縮したものは これ)。
bcc32 -tW w_p_smp2.cリソースを exe に埋め込む、って感じなのかな。
brc32 w_p_smp2.rc w_p_smp2.exe
bcc v5.5.1 でなく v5.5 の場合 brc32 は不具合のため実質使えなかったです。 また、makefileを書く場合など、brc32を使わない場合は brcc32 と ilink32を 使うことになります。 このへんは、旧頁が参考になるかもしれません。
#pragma などのVC固有の命令をある程度 互換を持たせているみたいで 用途によっては頑張れば共用のソースにもなるのかもしれない。 が、MFCがついてないとか、DirectX が X8のSDKからは標準では未対応に なったとか(DX5〜DX7ではMS配布のSDKの中にBorlandライブラリ対応分があったが、 今はここ?とかから 入手しないと駄目なのかも)、 スクリーンセーバー用のscrnsave.libが標準ではないとか (Mingw用Win32apiライブラリのソースが流用できるかもしれない)、 簡単には共通にならない面もままあるようだ。
実のところ、インストールや使い方、入門に関しては以下のような よいページがあるので、そちらを見てもらうほうが確実だろう:-) もちろん検索をすれば、他にもいろいろ有用なページが見つかるだろう。
Digital Mars C++ は、 以前は Win用の Symantec C/C++ だったもののようだ (Symantec-Cになる前は Zortech-C だったと思う。さらにその前にも 別の名前だったことがあったような)。 結構オプティマイズがよいコンパイラのように雑誌等で 書かれていたような覚えがある(少なくともdos時代の評価記事では)。
フリー配布なのは Borland-C/C++ と同様にコマンドラインツールのみとなっている。
もちろん、Winアプリ作成可能、日本語にも対応、てのも同様。
ただ、デバッガはフリー配布はしていない。
けれどMFC/ATLライブラリが別途配布されていたり、
またこのコンパイラ一つで16ビットDOS用のコンパイルもできたりもする。
そのせいか日本のページでは WanderSwan(Watch)の開発用に使われているところが
多いようだ(てか、Win用に使っているページが見当たらない^^;)。
ちなみに、CD配布版のほうは $30 ちょい。
製品というより配布手数料的な値段帯で手に入るようだ
(日本からだとどうなんだろ。先のWanderWatch系の頁を
見ると入手されてる方がちらほらいるようだけど)。
これには、IDEやらデバッガやらDOSエクステンダなど一式が入っているようだ。
ところで、実際にフリー版をお試しした感じだが、 どうもWin対応に対して現在のは不備があるかもしれない。 (己のヘマかもしれないけれど。サイトのトップに"Code of the Nerds" なんて書いてあったり D Programming Language なんてページがあるのをみるとちょっと不安になるかも・・・個人か同人規模?か)。
コマンドラインでの"へろ〜わーるど"は
path c:\dm\bin;%path%を実行する(pathを通す)。
sc -mn -Bj -j0 hello.cとして、コンパイル。-mnがWin32用. -j0 がシフトJIS文字指定。-Bjはエラーメッセージを日本語 ( -mn はデフォルトのようなので省けるようだ)。
次にwin。 以前作ったサンプルw_p_smp1.c を試してみる。scのヘルプをみると win32アプリの場合は -WA が必要なようだ。
sc -WA -mn -Bj -j0 w_p_smp1.cしかし実行すると _GetStockObject@4 が無い、とリンカに怒られる。 grep "_GetStockObject@4" c:\dm\lib\*.lib をして調べると どうやら gdi32.lib にある模様。改めて
sc -WA -mn -Bj -j0 w_p_smp1.c gdi32.libとすると今度は exe が作られる。 コマンドラインから実行すると、ちゃんと動いてく。 めでたし・・・と思いきや、 しかし w_p_smp1.exe をGUI環境から実行すると 余分に DOS 窓が開いてしまうのだった。
sc -mn -WA -j0 -Bj -NL w_p_smp1.c gdi32.lib user32.lib kernel32.lib snn.lib状況は変わらず。 スタートアップルーチンがコンソール用のを使ってしまっているように思えるし、 オプション設定の間違いのようにも思えるが、 なにか根本的に間違ってそうな気もしてくる。英語の 解説ページ と か を調べればわかるのかもしれないが、めんどくさがって挫折^^;。
あとリソースコンパイラを使ってみるために、同様に w_p_smp2.cと w_p_smp2.rc, resource.hを
rcc -32 w_p_smp2.rc >err.txtのようにして試してみると、とりあえず exe生成でき実効できる。 もちろん先と同様、dos窓と一緒に起動されてしまうけれど。
sc -WA -mn -Bj -j0 w_p_smp2.c w_p_smp2.res gdi32.lib >>err.txt
まあ、そのうちちゃんとなるか己がヘマを知るんじゃないかな、と思う。
以前市販されていた watcom c/c++ と fortran が、オープンソース化されている最中 (sybase というところが管理/作業してるようだ)。
Win95 前の、パソコンは32ビットになったけどソフト/開発ツールの大半がまだ16ビット って時代に、よく使われていたと思う。dos4g(w)というDOSエクステンダが付属してて グラフィックVRAMへもアクセスできたので重宝されていた (dos4gwを一緒に配布できたのも大きな理由だったと思う)。 ただ DOS16向けの文法は結構 MS-C と違っていて、そのためMS-C/TC系の代用 (ソースの共用)には向いてなかったようにも思う(インラインアセンブラも違った形だったっけ)。
現在の配布は、まだ正式な配布でなくβ版で、以前の市販版のアップグレードと
いう形になっている。
どうやら、版権の絡むルーチンを取り除いている最中らしく、その作業がすんだら
ソースも公開する、ってことのようだ。
※2002/06現在、ひさしぶりに確認したらソース公開されてました。
ダウンロードして(watcom-c-11.0c-b1.exe 40M超ある^^;)インストールできるが、
スタートからのプログラムメニューにはアップデートプログラムしか入ってないだろう。
けど、出来たフォルダ(C:\watcom)を覗くと、
コンパイラやアセンブラ、IDE, デバッガなどのツールは一通り入っているようだ。
で、windows関係のヘッダやライブラリは入っていないので Winアプリは無理そうだが、
pathや環境変数設定したらコマンドラインツールは使えそうかな・・・と思うも残念。
実際試しにコンパイルすると、リンクでライブラリが足りていない(win系のlibが必要)みたいだ。
オプション指定の具合で、可能なのかもと思うも挫折
。
IDEやデバッガも環境が作られていないためか、起動しなかったり起動しても 使いようがなかったりする。これも設定しだいのような気はするが。
ところで、運のいいことに、リソースエディタの wde.exe は単体使用できるようだ。 試しに生成してみると拡張子は .dlg だけど中身は .rc のファイルが作られている。
なお以前日本版があったので、コンパイラはもちろんシフトJIS文字には対応している (mbstring.hとかのヘッダも残ってるし、それむけのサンプルも入ってるし)。
ちゃんと動き出したら総合環境でかなり強そうだけど、今はまだ夢、てとこか。
※ 試しに手持ちの10.5(バージョンアップ対象外?)をインストールしたところに アップデートしてみると hello.c くらいは可能だが、IDEの設定はおかしいままのよう。
移植性の高いANSI-Cコンパイラ(C++には未対応)を Win環境用に移植&強力に特化したC開発環境。サイトではFortranコンパイラも配布されている。
lccと言う名前はDOS用のLSI-C のコンパイラドライバと同名なので混乱されている場合もあるかもしれないが、それとは別もの。
このコンパイラは、もちろんコマンドラインもあるが、 IDEタイプの開発環境で、win/x86に特化しており、出来は市販品同等の本格なシロモノ。 他のランチャー的なフリーのIDEに比べると抜き出てる存在だろう。 コンパイラのオプションみるとペン3向けとかあったり、 ライブラリも OpenGLやらDirectX8やら最初から入っていて充実しているようだ。
リソースエディタも付いている(これは抜き出されて別のIDEでも配布されている)。アイコンエディタもある。
デバッガが、ソースエディタで、
ブレークポイントはプログラム用だけでなくメモリ/データにも指定できるし、
レジスタ、逆アセンブラ,メモリ,Global/Local変数,スタック,プロファイルなど、
一通りちゃんとあるようだ。MMXなどにも対応している。
(と、書いたけどちょろっと立ち上げてメニュー見ただけなんで使い心地は未体験^^;)
デバッガ未体験の入門者は、これを触ってみるのもいいのでは、と思ってしまう・・・
日本語(シフトJIS)に未対応なのは(IDEのエディタも未対応だしコンパイラも)、
ちょっと敷居高いかもだけど(自分だってめんどくさがって触っていないわけだし。
日本語資料少なそうで、英語見るのつらいしね^^;)。
LCC は C コンパイラであってC++じゃないけれど、
付属のドキュメントみてると、
どうやら結構 C++的な拡張(リファレンス(&)とかオペレータ・オーバーロードとか)がなされてる
みたいで、意識すればC++のサブセット的に使えるのかもしれない。
あとMMX/3DNOW専用命令もあるようだ。
path c:\lcc\bin;%path%のようにpathを通す。
lc hello.cを実行(名前につられて lcc hello.c をすると.obj しかできないので注意^^);。
lc w_p_smp1.cとして試してみると、ありゃりゃ、DOS窓がまたも一緒に... スタートアップがコンソール用のままだと、そうなるんだろうな... ごちゃごちゃと試して結局 (IDE上でプロジェクト作ってmakefile生成してそれを参考に。 なにか本末転倒な気分あり)、
lcc w_p_smp1.cとすれば、出来ているようだ。
lcclnk -subsystem windows -o w_p_smp1.exe w_p_smp1.obj
同様に w_p_smp2.cと w_p_smp2.rc, resource.hを
lcc w_p_smp2.cで、コンパイル。実行すると出来たようだ(っほ)。
lrc w_p_smp2.rc
lcclnk -subsystem windows -o w_p_smp2.exe w_p_smp2.obj w_p_smp2.res
と、コマンドラインで作業したが、
IDEの出来がよさそうでウィザードもあるので、
本来ならそっちで試したほうがよいような気が結構してくる・・・
とりあえず、そのような開発の手引きとしては、下記のリンク
等を参考にしてください。
このうち djgppは 基本的には MS-DOS&DOSエクステンダ(go32)という環境向けで win95 以前には 結構普及してと思うが、Win32用途としては現在(ver2以降)コンソールアプリは (go32不要で)作れるけれど窓アプリは未対応のようなので出番は少ないかもしれない。
cygwin はgccとして だけでなく、unix的開発環境やソフト自体を win上に構築するために ある、という感じのものだろうか。 逆に unixに拘らない/疎い人にとっては少々敷居が高い存在かもしれない。
MinGW は、 UNIXには拘らずに win アプリを作るために整えられたもののようで、 cygwinよりはお手軽のようだ(現在は cygwin のほうにも機能が融合されて いるようだけれど、cygwinまで要らない人は MinGW を使っているというのが 現状なのかもしれない)。
DirectXやOpenGLなどのWin用のライブラリも一通りそろって いるみたいだ(? lib\*.aをみると、なんだが・・・DirectX関係のヘッダは何処に^^;)。 ちなみにwin32apiライブラリに関してはどうも別扱いで (L)GPLでなさそで、 流用しやすいライセンスのようだ。
IDEに関しては MinGW 自体には無いけれど、MinGW を呼び出したりパッケージ
に含めた IDE型の開発環境がいくつか存在している。
(実のところ、後述の
Dev-C++は
IDEだけでなくコンパイラやデバッガ込みで配布していて、
またGUIデバッガInsightやDirectX8ライブラリも同様に
配布されているので、
コマンドラインしか使わないにしても、こちらのほうが入手やインストールが簡単かもしれない)。
シフトJIS文字については未対応のようだ(と思う)。 多分必要ならば 各自で \ 問題を回避するフィルタやラッパーを用意したり、あるいは手修正の場合も あるかもしれない (己は自作のこれ(やこれ) なんかで回避)。
path c:\mingw\bin;%path%のようにpathを通す。
gcc -o hello.exe hello.cを実行.
gcc -mwindows -o w_p_smp1.exe w_p_smp1.cで作成できる。また w_p_smp2.cと w_p_smp2.rc, resource.hの場合は
windres -o w_p_smp2_res.o w_p_smp2.rcで出来るようだ。リソースファイルの変換後の拡張子がresでなく oでないと駄目なようなので(?)、実際の運用では rcファイル名も cソース名に衝突しないようにつけておいたほうが 良さそうかもしれない。
gcc -mwindows -o w_p_smp2.exe w_p_smp2.c w_p_smp2_res.o
Dev-C++ 4 は、
MinGW(gccコンパイラ) 自体も含んだパッケージが配布されていて、インストールが楽。
他にインストールしたMinGWやCygwinを使う設定もできるよう(?)だけど、デフォルトでは
これだけで閉じた環境になるので、単体で使いたい者にとっては扱いやすい。
海外製だが、 IDE のエディタは、日本語(マルチバイト文字)に対応していて、
カーソルがちゃんと全角を考慮して移動できる。
表示もデフォルトの起動では英語フォントのため化けるが、
フォントを日本語を含むものに設定し直すと、ちゃんと表示されるようになる。
でもコンパイラ自体は未対応のままのようだ
(拙作のsjis対応化cppラッパーは使えた)。
いろいろ便利な機能があるようだけれど、リソースエディタはついてない
(外部ツール呼び出し機能があるので、
他のリソースエディタ(LCCのWEditRes.exeとか)を登録すれば可能)。
デバッガとしては、デフォルトでgdbが入っている。
これはコンソール(dos窓)なのでちょっとめんどくさいかもしれないが、
別配布で
GUI 化した gdb ( Insight v5.0 ) が移植されており、
こちらをインストールすれば、使えるようになる
(インストールは、ダウンロードしたパッケージを解凍するとDev-C++の
ディレクトリ構造のものが展開されるから、それをそのまま自分のインストールした
Dev-C++の場所(C:\Dev-C++)に上書きコピーする)。
Insight/GDB は、よく知らないので立ち上げてメニューみる範囲では、 (プログラム)ブレークポイント, レジスタ, 逆アセ, Global/Static変数, メモリ, スタック, と一通りのことはできるようだ(GDB自体はデータに対するブレークポイント(ウォッチポイント)はあるけど、 Insight上での指定は不明・・・コンソールモードで設定すればよいのかもしれない)。 キーはDos/windows系のものと感覚がちがう。 というかなるたけ元のGDBの命令をそのままキーに当てはめているようにみえる(s でステップ実行、等)。 IDE側 との連携は設定が悪いのか別起動のソフトなので、いまいちな状態。 (あとInsight自体はDev-C++でなくても環境設定とか調整すれば他の IDE 環境でも使えそうにみえる)。
その他、Dev-C++自体のソースも配布されていたり(Delphi)、Linux 版も作りはじめているようだ。
※ Dev-C++ 5(β3)では、IDEの中で gdb が使えるようになる/なってるようだ。
ブレークポイントやステップ実行,Watch位はIDE上でできるらしい。
■リンク
Wide Studio(WS Builder)は、
RADぽいツール
(C++BuilderやVB等に似た感じ?)のようで、
独自のC++のクラスライブラリとヴィジュアル・ウィンドウエディタで作成できるようだ。
Windows用だけでなく Unix系用もある
(てか逆?。BSD Magazineに連載されているらしい)。
作者が日本人でWEBページやヘルプ等は日本語なので取っ付きやすそうだ。
コンパイラも文字コードは SJIS,EUC,ユニコード(UTF-8) に対応しているとのこと。
・・・結構すごそうかも。
(cpp を拡張しているぽい?ラッパーでなくきっちり対応してそうなので、
このコンパイラ環境なら、苦労せず日本語が扱えるのかも?^^;)。
gcc Developer Station 2000 v1.1(gds2k)は、
作者が日本人でヘルプも日本語なんでその辺は楽。だけれど、どうも現在は休止のようだ。
現在は別の方が代理配布されている。
インストールでは、すでにある MinGW のフォルダを指定するかその場で MinGW を
インストールするかを選択する(己はすでにあるMinGWを指定してインストール)。
ユーザインターフェースはVisualStudio系かな。
デバッガは gdb を使用するのだけど、ソースエディタ上で
ブレークポインタを設定できたり、ステップ実行トレース実行ができる。
変数表示もできる(が、これは、結構コマンドラインツール的かな)。
insight に比べると貧弱だけれどIDEと一体なのは便利かも。
あっと gdb.exe がMingwのパッケージに同梱されていないなら(己の入手した分には無かった)、
別途入手してインストールしておく必要がある。
gdb無い状態でデバッグモードに入ると変な状態になるかもしれない(^^;)。
VIDE 1.23は、
Mingw だけでなく Cygwin や Borland-C, JAVA などに対応しているらしい。
日本語(シフトJIS)は未対応(フォントをMSゴシックとかにしても化けたまま)。
デバッガは gdb。
ちゃんと環境設定をできていなくてコンパイルとか試せてないです。
Cygwin だと Source Navigatorや GDB/Insight とかいうものがあるらしい (RedHatで日本語でのガイドがあるかも)。
で、と。
ほんまさわりを眺めただけで、ぜんぜん使い込んでないので、
差っぴいて見てください。
誤記とかあるだろし。て、すぐに見つかるし^^;
やっぱり、日本語文字のこと、日本語資料のこと、を思うと BCC が楽チンでいいよなあ、て具合だろうか。 単に己が普段から使ってる、ってが大きいのだろうけど。
日本語が使えない、日本語資料がほとんどない、ってことを除けば (C++でないっていうのもデメリットかな)、 思いのほか LCC のIDE/デバッガやライブラリの充実具合がすごくって びっくりしている。 ダウンロードしたそのままで一通り揃っているのは利用者にとっては大きい要素だろう (bccに限らずいくつかのツールやライブラリを集めて更新して環境構築しないと 使えないというのは、結構煩わしいものだし)。 英語圏の人には結構いい環境そう。入門などにも。 もっとも日本人でも、自分で初歩的なとこから調べないと駄目だったり するからプログラマ養成にはいいかも:-)
MinGW関係もいろいろ充実してきてる。WideStudioとか結構すごくておもしろそうだし、
Dev-C++なんかもいい感じ。
open watcom は実現すれば強力な存在になりそうだが、まだ、もう少し未来かな。
Digital Mars は己のヘマぽいがちゃんと使えてないのが悔しい。CDだと問題ないのだろうか。
あ、こんなフリーの紹介ページみたいなものを書いておいてなんだけど、 前提条件/状況によっては、フリーので苦労するよりか市販品 (C++BuilderなりVisual-Cなり)を買ったほうが安上がり、ってことも結構あると思う。 懐より時間のほうが大事なことも、ある話だし。 趣味でも変にフリーに拘りすぎることもないよなあ、てね。 反面、趣味だからフリーに拘るってのも面白いのだけど。