これからC言語をやっていくにあたって必要なものを用意しましょう。ほとんどLinuxに標準でついているものでOKです。
(※ Linux + GCCをターゲットとしています。Windowsユーザの方で迷い込んでしまった方、Windowsでプログラミングしたい方はVisual Studio Express Editionをインストールするといいでしょう(登録が必要ですが、無料です)。「Win32 コンソールアプリケーション」の空プロジェクトから作り始めると、ここに書いてある内容が大体再現できます。)
あとは、ターミナルエミュレータの使い方を少し知っている必要があります。
テキストエディタは何でもOKです。
vi, emacs, geditなど色々ありますが、自分の使いやすいものを使いましょう。
(※ Visual studioはIDE(統合開発環境)と呼ばれるもので、エディタ、コンパイラなどが一体化していますので、「これ一つあれば何でもOK」というすごいやつです。でもちょっと動作が重かったりする・・・。)
(※ 設計、テストなどは割愛してあります。)
プログラマが何かパソコンに打ち込んでいるのをイメージしてもらえばいいと思います。エディタを使って、プログラム言語を使って処理を作成する段階です。
エディタを使って↑のようなものを書いていきます。
自分で書いたソースコードはそのままではコンピュータは理解できません。コンピュータは0と1の人間では理解できない情報の集まりによって動いているため、書いたソースコードをコンピュータが理解できる形に直さなければなりません。
ソースコードを変換するタイミングには2種類あり、1つはプログラムを動かしながら変換する方式。この方式では処理を実行する都度変換作業が必要になるため、処理速度は遅くなります。
もう一つの方法はあらかじめ変換しておく方式で、実効速度は速いです。C言語はこちらの方式がとられ、ソースコード作成後、変換作業 - コンパイルが必要になります。
この作業はコンパイラとよばれるプログラムによって行われますので、人間の作業は、どのファイルをコンパイルするか、どのライブラリを使うかなどを決定するだけです。
一応完成となります。エラーが出ていたら、1に戻って、どこがまずいのか、確認と修正をしてください。
あとは動作のテストを行っていくこととなります。
/* このぶぶんは コメントです。 改行してもOK */ #include <stdio.h> /* プリプロセッサ */ /* ここからはじまる */ int main(){ int a; int A; /* aとAはべつもの */ a = 1; A = 2; printf("%d %d\n", a, A); /* 文末のセミコロンを忘れずに */ return 0; }
テキストを画面に出力するプログラムを作成します。
#include <stdio.h> int main(){ printf("This is an apple."); return 0; }
テキストエディタで、上の「#include <stdio.h>」から「}」を真似してタイプ、もしくはコピー&ペーストして、test01.cという名前で保存します。
これがプログラムのもとになるファイルで、ソースファイルと呼ばれます。
次にこのソースファイルからプログラムを作成します(この作業をコンパイルと呼びます)。コンパイルするには次のコマンドをターミナル上で入力してください。
$ gcc test01.c
(※ windowsでvisual studioを使っている人は「F7」キーを押してください(ビルド)。 VC++2008デフォルト設定)
すると、a.outというファイルができあがります(a.outはデフォルトのプログラム名です)。実行方法は、
$ ./a.out
です。
(※ windowsでvisual studioを使っている人は「F5」キーを押してください(デバッグ実行)。 VC++2008デフォルト設定)
実行結果は
This is an apple
となればOKです。
これでプログラムができたことになります。お疲れ様でした。
もう一度ソースファイルを見てみましょう。強調表示した部分を解説していきます。
#include <stdio.h> int main(){ printf("This is an apple."); return 0; }
#include ・・・ははじめは特に意味を考えなくてもいいです。多くの参考書等でも、おまじない、決まりごと、などとしています。
(注: #include ・・・はC言語の拡張機能を使うために使用する、と考えてください。このプログラムでは、printfが拡張機能になります。printfという拡張機能が定義されているのがstdio.hになります(/usr/include/stdio.hにあります)。だから、拡張機能が定義されているstdio.hを取り込む(includeする)ので、#include <stdio.h>となります。stdio.hにはprintf以外にも画面出力・入力、ファイル出力・入力の機能定義があるため、大抵のプログラムはこれをinclodeすることになります。
#include <stdio.h> int main(){ printf("This is an apple."); return 0; }
C言語の処理はmain関数からはじまります。C言語での関数とは、処理をするもの、処理の集合です。「{」から「}」までがこの関数で行う処理になります。
#include <stdio.h> int main(){ printf("This is an apple."); return 0; }
「printf("This is an apple.");」が、テキストを表示するコマンドです。ダブルクォーテーション「"」で囲まれた部分が画面に表示されます。なので、
printf("This is a pen.");
で、画面上に「This is a pen.」が表示されます。文字コードが正しければ、日本語も画面に表示できます。
#include <stdio.h> int main(){ printf("This is an apple."); return 0; }
関数の呼び出し元(Linux)に0を返します。main関数の返り値は大抵0が正常終了を意味します。1が異常終了。
命令文の末尾に「;」がないと、エラーになります。初心者の人がよく忘れます。下のソースをコンパイルしようとすると、エラーになります。
#include <stdio.h> int main(){ printf("This is an apple.") return 0 }
printfと、returnの後ろに「;」がありませんので、エラーです。
逆に、「;」を最後につければ、改行は自由です。
#include <stdio.h> int main(){ printf( "This is an apple." ); return 0; }
上の書き方は許可されます。
改行をするには、改行コード「\n」をいれます。「\n」を入れた場所で改行されます。
#include <stdio.h> int main(){ printf("This is an apple.\nThis is a pen."); return 0; }
上のソースをコンパイルし、実行すると、
This is an apple. This is a pen.
と、改行されて表示されます。ただ、上のソースでは改行されている場所が一見わかりにくいので、次のように分割して書くことをお薦めします。
#include <stdio.h> int main(){ printf("This is an apple.\n"); printf("This is a pen.\n"); return 0; }
これなら、どこで改行されるか、ソースコード上でもわかりやすいでしょう。
ここではprintfによる文字出力を扱いましたが、その他の文字出力方法については文字出力の補足のページを参照してください。
「\」や「"」などはC言語では意味のある記号として扱われます。そのため、これらの記号は書いたとおりには出力されません。これらを出力したい場合は、記号の前に「\」をいれます。すなわち、「\」を出力する場合は「\\」と、「"」を出力する場合は「\"」とします。
#include <stdio.h> int main(){ printf("Back slash or Yen mark = \\.\n"); printf("Double quotation = \".\n"); return 0; }
名前はコンパイル時に自由に変えられます。
$ gcc -o [コンパイル後のプログラム名] [ソースファイル名]
とします。test02.cというソースファイルをコンパイルして、testというプログラムを作成したい場合は、
$ gcc -o test test02.c
とタイプすればOKです。
かなり内容が凝縮しています。画面に一行表示するだけでも大変だと感じる人もいるかもしれません。またこのページの内容が難しすぎて覚えられない、と感じる人がいるかもしれませんが、次回以降の内容にこのページの内容と被る部分が確実に出てきますので、その時にまた学習すれば大丈夫です。
次のソースコードをコンパイルするとエラーになります。何が問題でしょう?
#include <stdio.h> int main(){ printf("I have an \napple. \n"); printf("I have a car. \n") printf("I have a house. \n"); return 0; }
次の文を画面表示するプログラムを作成しなさい。
Then, I met John. "Hi", he said.