パソコン活用研究シリコンバレー(C、C++、の活用研究)

                  はじめに


1 BASICとC

BASICである程度プログラムが組めるようになると、そろそろCでもやってみようかという気になって
きます。昔は(8ビットマシンの時代は)、BASICから機械語(アセンブラ)というのが、お決まりのコース
でしたが、今は、やはりBASICからCというのが、定番でございましょう。(という時代も終わりつつあり
ますが)

雑誌等を見ても、BASICの限界とかBASICの実行スピードの遅さというのを、過剰にあおりたてて
盛んに”C”を奨めています。こんなにあおったら、だれでもBASICを袖にしてなんとなくCに走り
たくなってしまいますが、さて、Cって、BASICに比べていったいどこがいいんでしょうか?
(BASICからCへも、ちょっと古い時代の話、1990年代前半の話)

インタプリタのBASICは確かに、そこここで指摘されているように実行スピードは遅い。スピードを追求
するならネイティブコードの実行ファイルをCで作る方がいいでしょう。
しかし、BASICに対しCのもっといい点は、ハードウエアあるいはハードウエアに近い部分を制御する
プログラムが書けるということでしょう。(と、偉そうに言ってしまいましたが、筆者の場合特にCでなくては
困るというというプログラムを組んだことはありませんが。)

BASICはBASICでちょっとしたプログラムを手早く作るには使いやすい良い言語だと思いますが、
その反面やはり限界があります。
例えばRS232Cでパソコン間のシリアルデータ通信をやるプログラムを作るとなると、昔のBASICでは、
RS232Cの細かい制御はBASICだけではできませんでした。(BASICも進化しているのでVisual BASIC 4.0
以降では、かなり細かい制御ができる) こういった場合、Cは力を発揮します。まあ、もともとシステム
の記述用に開発された言語ですから、当然といえば当然ですが。


2 筆者のCコンパイラと動作環境
(1) Cのコンパイラ
BASICはこれまた方言のたくさんある言語ですが、Cもまたコンパイラによって多少の方言があります。
筆者はTURBO C(PC-98用とDOS/V用)とLSI C試食版を使用しておりますが、誰でも手に
入れられる、という点で、LSI Cを中心に話をしたいと思います。
いずれにせよ、MS-DOSあるいはDOS窓、DOSモード上でのプログラムになります。

(2) LSI-C試食版
さて、ここで本来ならコンパイラのインストールについて書かねばならないのですが(場合によってはこの
インストールが第一の関門だったりしますが)、おじさんは、MS-DOSでの環境設定が苦手&LSI-C
のコンパイラの設定(コンフィギュレーション)はなんか面倒くさそうなので、FU−TA氏
の超簡単LSI-C86
セットアップ (http://www.vector.co.jp/soft/win95/prog/se037541.html)を使いました。
これを使うと、ソースファイルを「コンパイル」というアイコンにドラッグ&ドロップするだけでOKなので
らくちんです。
LSI C試食版はhttp://www.vector.co.jp/ のベンダー提供エリアの エル・エス・アイ ジャパン などから
LSI C-86 Ver 3.30c 試食版 (lsic330c.lzh) を ダウンロードできます。また、Cマガジン他の雑誌の付録
CD-ROMにもよくあります。

その他LSI-C用のミニ開発環境ツールなどがVectorを探すといくつかでています。Vectorのライブラリーの
Windows>プログラミング言語>C言語>LSI-C を探してみて下さい。

(2)−1  LSI Cのインストールと環境設定補足

上記のLSI C86セットアップを使うとらくちんですが、開発マシンを移行した関係で、Newマシンでは
通常通りに環境設定して使っていますので、環境設定方法について簡単に触れておきます。

@ 展開
lsic330c.lzhを展開すると、デフォルトでは以下のようなフォルダが作られるはずです。
LSIC86 -- BIN (lcc.exe コンパイラ本体  lld.exe リンカ _lcc.def コンフィギュレーションファイル など)
      |- INCLUDE  (ヘッダーファイル)
      |- LIB
      |- MAN
      |- SRC

A PATHの設定
まず、環境変数PATHにlcc.exe, lld.exeのあるディレクトリへのパスの設定をします。
Windows 2000,XP ではPATHの設定は以下の通りにやります。「スタート」−「コントロールパネル」
−「システム」とたどり、「システムのプロパティ」画面を開きます。その画面上で「詳細設定」タブを選択
すると、下に「環境変数」ボタンがあります。「環境変数」ボタンを押すと以下のような画面が現れますので
"PATH"を選択し、「編集」ボタンを押します。変数の編集画面で、「変数値」ところに、パスの記述を追加
します。
通常デフォルト設定でのインストールなら、C:\LSIC86\BIN でOKです。
おじさんは、新しいPCに開発環境を移行させたのに伴い、D:\win95 というフォルダの下にインストールした
ので、D:\win95\LSIC86\BIN というパスを追記しました。



B Files
Files は20以上に設定しておきます。たぶんWindowsを普通に使っていれば、20に設定されているはずです。

C _lcc(コンフィギュレーションファイル)の記述
_lcc はコンパイラのオプション設定を登録しておくファイルです。コンパイラlcc.exe起動時に各種オプションが
省略された時には、_lccに記述されたオプション設定が有効となります。
LSI-Cのコンパイラlcc.exe のオプション設定は記述が結構面倒(でもないか?)なので、_lccによく使う設定
をしておけば、コンパイルの度にオプションを設定することなしに、即コンパイルできて便利です。

以下にあるのは、\BIN にある_lcc.defという標準的なコンフィギュレーションファイルの雛形です。
これは、LSI-CをAドライブにインストールしたという想定のコンフィギュレーションファイルになっています。
これをベースに、自分のインストール環境にあわせて書き直して使えばいいでしょう。
特に書き換える必要のあるのは、-X, -L, -I オプションです。

 # LSI C-86 compiler's configuration file
-DLSI_C
-XA:\LSIC86\BIN -LA:\LSIC86\LIB -IA:\LSIC86\INCLUDE -T -O
-acdos.obj $LSICOPTS
&#Command line argument will be inserted here
-lknjlib -ldoslib -v

この設定では、コンパイラをディレクトリA:\LSIC86\BIN に置くことを仮定しています。
-X, -L, -I, -Tはそれぞれ、コンパイラ本体、ライブラリ、ヘッダ、作
業用ファイルを置く
ディレクトリを指定するオプション、-Oは最適化を実行すオ
プション、-aは初期設定モジュール
の名前を、-lは使用するライブラリを名前を
指定するオプション、 -vはコンパイルの過程を
表示するオプションです。&はコ
マンドラインで入力されたパラメタをここで展開する指示です。
# から改行まで
はコメントです。$は指定された環境変数の内容をそこに展開します。

自分の環境に合わせて書き直したら、_lcc というファイル名(拡張子はつけません)にして、作業用ディレクトリ
またはPATHの通っているディレクトリ(通常は\BIN)におきます。コンパイラlcc.exeはカレントディレクトリ −>
PATHの通ったディレクトリの順に_lcc を探します。

D その他
とりあえず、手っ取り早く使うための、デフォルト設定について記述しましたが、詳しくは\MAN に
LSIC86.MANというマニュアルがありますので、じっくり読んで下さい。(読みたくないと思いますが)

E おじさんの環境設定の例
ちなみに、おじさんはLSI-CをD:\win95\LSIC86というディレクトリ以下にインストールし、ソースファイルと
生成された実行ファイル等は、作業ディレクトリとしてD:\win95\C に置いています。
したがって、環境変数PATHにD:\win95\LSIC86\BIN を追加。
_lcc は以下のような記述にして、作業用ディレクトリに置いています。

# LSI C-86 compiler's configuration file

-DLSI_C
-XD:\win95\LSIC86\BIN -LD:\win95\LSIC86\LIB -ID:\win95\LSIC86\INCLUDE -T -O
-acdos.obj $LSICOPTS
&		#Command line argument will be inserted here
-lknjlib -ldoslib -v

この環境設定では、以下のようにコンパイラにソースファイルを食わせれば実行ファイルが即生成されます。
>lcc SourceFile

以下はこの環境で、hello.c をコンパイルする流れです。

D:\win95\C>type _lcc

# LSI C-86 compiler's configuration file

-DLSI_C
-XD:\win95\LSIC86\BIN -LD:\win95\LSIC86\LIB -ID:\win95\LSIC86\INCLUDE -T -O
-acdos.obj $LSICOPTS
&               #Command line argument will be inserted here
-lknjlib -ldoslib -v

D:\win95\C>type hello.c
/*      HELLO.C -- Hello, world */

#include <stdio.h>

main()
{
        printf("Hello, world\n");
}

D:\win95\C>lcc hello.c
lld @link.i

D:\win95\C>dir hello.*
 ドライブ D のボリューム ラベルがありません。
 ボリューム シリアル番号は 8832-AEB9 です

 D:\win95\C のディレクトリ

2003/11/16  13:12               104 HELLO.C
2003/11/16  16:58            11,969 HELLO.EXE
               2 個のファイル              12,073 バイト
               0 個のディレクトリ   9,969,377,280 バイトの空き領域

D:\win95\C>hello
Hello, world

D:\win95\C>


F ライブラリの作成と管理
オブジェクトファイルの作成、ライブラリファイルの作成、ライブラリの管理については
割り込みA(intdos使用例)の後半に実施例を書いていますので、ご参照下さい。


2 TURBO C2(DOS/V用)
Free Basic Translator (閉鎖中)というサイト(おじさんの関連サイト 「パソ活研5番街/
リンク集」にリンクあります)
でTC2(DOS/V)がダウンロードできます。DOS/V用です。Windows95/98/MeのDOS窓で使えます。
残念ながらPC-98では使えません。
Borlandのantique SoftwareのページからTurobo CやTurbo Pascalの古いバージョンがダウンロードできます。

3 その他
Windowsで使うなら
Borland c/c++、Visual studioのVC/VC++、Cygwin環境にはgccがあります。

64bitのWindowsのコマンドプロンプト上では16bitのコンパイラ(LSIC86)は動作しないので、以下のコンパイラを
使うことになります。

(1) Boraland C++ Complrer
Boraland C++ Complrerについては、Boraland C++ Complrerのインストールをご参照下さい。
C++のコンパイラですが、もちろんCのコンパイルもできます。

(2) Visual Studio VC++
Visual StudioのVC++でも、Cプログラムの開発はできます。

以下はVisual Studio2022でCのコンソールアプリを作る手順です。

「新しいプロジェクトの作成」画面では、C++を選択し、テンプレートとしては「コンソールアプリ」を選びます。



次の「新しいプロジェクトを構成します」の画面では(画面は省略)、プロジェクト名と保存場所を決めます。

統合環境の開発画面が開きますが、ソースコードはC++のテンプレートが開いています。
Cの開発を行う場合は、左側のソリューションエクスプローラーのソースファイルを右クリックし、[追加]-[新しい項目]
を選択します。
なお、ソリューションエクスプローラーのソースファイルにあるC++のテンプレートのファイルは削除しておきます。



「新しい項目の追加」画面で、ソースファイルの名前を変更します。この時に拡張子はcppではなく、cにします。



そうすると、ソリューションエクスプローラーにCのスースコードが追加されますので、その画面に
Cのソースコードを書いてビルドすればCプログラムができます。


TopPage