C言語/はじめに
出典: フリー教科書『ウィキブックス(Wikibooks)』
目次 |
[編集] C言語とは
C言語とは、1970年代初めに、アメリカのベル研究所のデニス・リッチーらにより、 UNIXオペレーティング・システムの記述言語として開発された、多目的プログラミング言語である。 UNIX自体の成功、高い可搬性、ハードウェアに根ざした単純で小さな言語であること、多数のライブラリの存在、などの理由から、 C言語はもっとも普及したプログラミング言語の1つとなった。[1] 現在、多くの実用プログラミングでは他の後続の言語(java, c++, c#)に取って代わられつつあるが、 業務用開発、組み込み系、ゲームプログラミングなどで依然として使われている。
本教科書は、日本工業標準調査会の『JISX3010:2003 プログラム言語C』に準拠する。 これは日本語で書かれた最新のC言語の規格(2009年4月現在)で、 国際標準化機構の『ISO/IEC9899:1999 Programming Languages - C』に基づくものである。
[編集] 開発手順
notice! 以下は昔ながらのエディタとコンパイラを使った開発手順を説明してあります。 今は統合開発環境を使って、これらの手順の大部分が自動で行われるため、 このような記述を必要ないと思う方もいるかもしれませんが、 エラー発生時の対処などに役立つかもしれないという考えのもと、 あえて説明してあります。
C言語プログラムの開発は、以下の手順で行われる。
- エディタを使ってソースファイルを作成する。
Windows付属の「メモ帳」などのテキストエディタを使って、C言語のプログラムを入力し、拡張子「.c」のファイルとして保存する。このファイルをソースファイルと呼ぶ。またソースファイルに書いたプログラムをソースコードと呼ぶ。 - コンパイラを使ってソースファイルをオブジェクトファイルへとコンパイルする。
ソースファイルはそのままではコンピュータでの実行に適さない。そこでよりコンピュータでの実行に適した形式に翻訳する必要がある。この翻訳を行うことをコンパイルと呼び、コンパイルを行うプログラムをコンパイラと呼ぶ。また、こうして作られる拡張子「.obj」のファイルをオブジェクトファイルと呼ぶ。 - リンカを使って複数のオブジェクトファイル同士をリンクし、実行可能ファイルを作成する。
1つのオブジェクトファイルでは実行することはできず、拡張子「.exe」の実行可能ファイルを作るためには、複数のオブジェクトファイルを結合する必要がある。この結合を行うことをリンクと呼び、リンクを行うプログラムをリンカと呼ぶ。また、多くのコンパイラはコンパイル時にリンクも自動で一緒に行うことがある。
[編集] 開発環境を整える
上では昔ながらのエディタとコンパイラを使った開発手順について述べたが、 今はより便利な統合開発環境があり、あえてそれらを使う必要はないだろう。 統合開発環境とはエディタ、コンパイラ、リンカ、デバッガ(※プログラムの不具合いわゆるバグを取り除くためのプログラム)などの機能が、 使いやすく統合された開発環境のことである。 以下では代表的なエディタ、コンパイラ、統合開発環境などを紹介する。 使い方は各公式サイトまたはヘルプ機能を熟読し、習得して欲しい。
Microsoft Visual C++ 2008 Express Edition 概要:Microsoftから無償で提供されているC++統合開発環境。 ※C++は厳密にはCの上位互換ではないが、 だいたいのソースファイルはコンパイル可能。 ライセンス形態:(価格:無料,商用利用:可能,オープンソース:x) プラットフォーム:Windows 準拠規格:? 公式サイト:http://www.microsoft.com/japan/msdn/vstudio/Express/
C++ Builder 概要:? ライセンス形態:? プラットフォーム:? 準拠規格:? 公式サイト:http://www.codegear.com/jp/downloads/free/cppbuilder
[編集] Hello, World!を実行する
notice! コピー&ペーストではなく、ぜひ自分自身の手で入力して欲しい。 これには実際に入力することで覚えるという意味があります。 学習過程では教科書を何度も読み直し正確な知識を身に付けることは大切ですが、 実際のプログラミングでいちいち教科書を参照しているようでは日が暮れてしまいます。 教科書を見ずにすらすらプログラミングができるよう、 全て覚える心構えで学習しましょう。
//HelloWorld.c
#include "stdio.h"
int main(void)
{
printf("Hello, World!");
return 0;
}
開発環境が整ったら上のソースコードを入力し、コンパイルしてほしい。 これは「Hello, World!」プログラムと呼ばれ、多くのプログラミングの入門書などで使われる伝統的なプログラムである。 画面に「Hello, World!」と表示した後、ただちに終了する。 ここではこのソースコードについて簡単に説明しよう。 長いけどがんばって!
- 1行目は、注釈である。
注釈とはプログラマの覚え書きとしての単なるメモで、プログラムの処理とは一切関係はない。C言語では2種類の注釈表記方法があり、「//」から行の終わりまで、または「/*」と「*/」とで囲まれた文章が注釈である。ここでは「HelloWorld.c」というファイル名の記述が注釈として扱われる。[2]
- 2と4行目は任意の空白行である。
ここでは単に読みやすくする目的で空白行を入れたが、入れるかどうかは自由である。
- 3行目は前処理指令の内の1つである#include指令である。
前処理指令とはコンパイルの翻訳過程において、翻訳の前に行われる処理のことで、#前処理字句からはじまる1行を指す。翻訳の前に行われる処理には、ソースファイルの1部分を条件によって読み飛ばしたり、他のソースファイルを組み込んだり、マクロを置き換えたりする、などがある。
#include指令とは前処理指令の内の1つであり、他のソースファイル取込みを行う。ここでは"stdio.h"が取り込むソースファイルのファイル名であり、これは7行目のprintf関数を使う際に必要となるソースファイルである。[3][4]
- 5行目はmain関数の定義である。
main関数とはプログラムの開始処理において、いろいろな初期化処理の後、最初に呼び出される関数と呼ばれる処理単位である。たいていのプログラムはこのmain関数から始まると考えてよい。[5]
- 6と9行目はブロックというまとまりである。
ブロックはいくつかの文を1つの構造的な単位にまとめるものである。ここではprinf関数の文とreturn文の2つの文が、main関数の処理としてまとめられている。[6]
- 7行目は標準ライブラリの内の1つであるprintf関数の呼び出しである。
標準ライブラリとは、プログラミングでよく使われる処理がまとめられたもので、代表的なものには、入出力(stdio.h)、文字列操作(string.h)、数学(math.h)などがある。
printf関数とは、標準出力に対して書式付の文章を書き込む関数である。標準出力はデフォルトでコンソール画面である。ここでは"Hello, World!"が標準出力に書き込む文章である。[7][8][9]
- 8行目はreturn文である。
return文とは、実行中の関数の実行を終了し、制御をその呼び出し元に返す。ここではmain関数の終わりを意味している。「return 0;」の「0」は返却値と呼び、関数の呼び出し元に渡す数値であり、ここでは、ふつう、このプログラムを実行するオペレーティングシステムに対して渡され、0はプログラムの成功終了状態を表している。なお、main関数を終了する}に到達した場合、main関数は値0を返すため、このreturn文は冗長であり、省略してもよい。[10][11]
- 7と8行目がタブ入力により他の行より右から始まるのは字下げと呼ばれる。
ここでは単に読みやすくする目的で字下げを入れたが、入れるかどうかは自由である。
[編集] うまくコンパイルできない場合
コンパイルエラーが発生した場合、 エラーメッセージをメモし、ヘルプ機能などを使って調べてみてください。 また以下の項目も確認してみてください。
- ソースコードを正しく入力したか。
- 大文字と小文字を間違えていないか。
- 「;(セミコロン)」を書き忘れていないか、または「:(コロン)」と間違えていないか。
- 「{}(中括弧)」を書き忘れていないか。
- 環境変数を正しく設定したか。
- コンパイラのディレクトリがPATHに設定されているか。
- libやincludeのディレクトリがPATHに設定されているか。
- すぐに終了してしまう。
正しい動作です。もし、画面の表示を確認できないほど高速に終了してしまうなら、コマンドプロンプト[12]で実行すれば文字列が表示されているのを確認できると思います。
[編集] 脚注
- ^ Dennis M. Ritchie(2003)『The Development of the C Language*』
- ^ 『JISX3010:2003』p.48「6.4.9 注釈」
- ^ 『JISX3010:2003』p.110「6.10 前処理指令」
- ^ 『JISX3010:2003』p.113「6.10.2 ソースファイル取込み」
- ^ 『JISX3010:2003』p.8「5.1.2.2.1 プログラム開始処理」
- ^ 『JISX3010:2003』p.99「6.8 文及びブロック」
- ^ 『JISX3010:2003』 p.124「7 ライブラリ」
- ^ 『JISX3010:2003』p.210「7.19.6.3 printf関数」
- ^ 『JISX3010:2003』p.198「7.19.6.1 fprintf関数」
- ^ 『JISX3010:2003』p.105「6.8.6.4 return文」
- ^ 『JISX3010:2003』p.9「5.1.2.2.3 プログラム終了処理」
- ^ Windows Vistaではcmd.exe
[編集] 外部リンク
- The Development of the C Language*(英語)
- JISC 日本工業標準調査会
『JISX3010:2003 プログラム言語C』は「JIS検索」→「JIS規格番号からJISを検索」で「X3010」と入力し「一覧表示」→「JISX3010」→「規格の閲覧」で閲覧できます。(2009年6月13日 (土)確認)


