未完成 2013.7.31 Ver1完成予定
c言語はBasicやCOBOLに比べて難しいです。
特にマイクロソフトのVisual C++でWindowsアプリを作ろうと思ったら少し何かを
やろうと思っても難しいです。
Visual C++でもコンソールアプリはそれほど難しくありません。
それでも開発環境がすごく大掛かりになり、できればもっと軽いCで作りたい。
ひと昔前、無料で使用できるCコンパイラというとボーランドのBCC32が有名だった。
ボーランド社は1980年代にはマイクロソフトを上回る勢いだったが結局競争に敗れ、BCC32は
10年以上バージョンアップしてなく、bcc32は1999年のC言語の規格を満たしてない。
"無料で使えるCコンパイラ"でグーグル検索しても未だにBCC32を推すホームページが
多いが、mixiの方に教えていただいてgccに辿り着きました。
ダウンロードと設定は以下のページを参考に。
gcc(MINGW版)をとりあえず使うには
私はインストール後、環境変数pathに C:\MinGW\bin を追加しています。
(スタートボタン-コントロールパネル-システム-詳細設定-環境変数 でpath をポイントしてから編集)
コマンドプロンプトを開いてgcc Enterと入力して反応があればよし。(以降Enterは略)
「内部コマンド、外部コマンド、操作可能なプログラム・・として認識されません」と出たらpath設定要です。
どこかに作業用ディレクトリを作り(例、c:\dev\c cドライブのdev\cディレクトリ)
以下のようなソースプログラムを作ります。
// helloworld.c
#include <stdio.h>
int main(void){
printf("Hello, world!\n");
return 0;
}
次にこれをhelloworld.cという名前で保存します。helloworld.cppでも大丈夫です。
コンパイルするにはコマンドプロンプトを開き
(スタートボタン-全てのプログラム-アクセサリ-コマンドプロンプト)
ソースプログラムのありかに移動します。
コマンドプロンプトの画面は
C:\Users\ユーザ名> (ユーザ名はWindowsのユーザ名)
となっていますが
C:\Users\ユーザ名>cd c:\c
と入力すると
c:\dev\c
と変わる。
コンパイルコマンド gcc helloworld.c -o helloworld.exe
ここでコンパイルエラーが出なければ
実行コマンド helloworld
これで helloworld と打てば "Hello, world!" と返してくればOKです。
改めてソースプログラムを見てみましょう。
//s01 helloworld.c
#include <stdio.h>
int main(void){
printf("Hello, world!\n");
return 0;
}
最初の // helloworld.c というのはコメントです。またコメントは
/* コメント */
という形式も可能です。
次の #include <stdio.h> というのは、ヘッダーファイルのインクルード指示です。
stdio.h というのは standard input-output header file の略称で
画面やファイル、プリンタなどとの入出力を制御しています。
次の int main(void){ は
引数を持たない、整数を返す メイン関数 で 最後の"{"は対になる"}"までがmain関数と示しています。
mainというのは特別な関数で、コンソールアプリケーションの動作の起点となります。
次に printf("Hello, world!\n"); という行がこのプログラムの処理内容の部分です。
"Hello, world!\n" というデータを標準出力に書き出します。
return 0; はmain関数に戻り値を設定して終了します。
最後の"}"は main 関数の範囲の終わりを示します。
さて、main関数にはもうひとつ書式があります。それは
int main (int argc,char *argv[]){ という形式です。(先頭の"int"という部分はいろいろ変わります)
mainの後に来る (void) と (int argc,char *argv[]) について解説すれば
(void) は「引数を持たない」という意味だったのに対して
(int argc,char *argv[])は整数argcが示す個数の char *argv[] という文字列の引数を持つというような意味です。
本当はもっと難しいようですが、ともかく使ってみましょう。
//s02.c
#include <stdio.h>
int main(int argc,char *argv[]){
printf(argv[1]);
return 0;
}
コンパイル:gcc s02.c -o s02.exe
実行:s02 hello と打てば「hello」と、s02 goodbyと打てば「goolbye」と返してきます。
試しにs02 1 2 3 4 5と打てば「1 2 3 4 5」と返してきます。
また少し改造して次はs03です。
//s03.c
#include <stdio.h>
int main(int argc,char *argv[]){
int ix;
printf("argc=%d\n",argc);
for(ix = 0;ix < argc;ix++){
printf("%s ",argv[ix]);
}
return 0;
}
ここでs02.cとs03.cの解説です。
printf(argv[1]); は引数を出力せよというコマンドです。
int ix; は整数型の変数 ix を宣言しています。
printf("argc=%d\n",argc); 引数の数を表す整数を10進数として出力しています。
for(ix = 0;ix < argc;ix++){
は最後の{ に注目してください。対になる閉じ括弧までを変数ixが0から引数の数を表す変数より
小さい間、ひつつづつ加算しながら実行しています。
printf("%s ",argv[ix]); はix番目の引数を出力します。
次はAsciiコードの実験をしてみます。Asciiコードは本ホームページの文字コード入門を見てください。
◆
JAVA SE SDKのダウンロード
◆Java API 日本語ドキュメント
▲index △TOP