C言語/基本的なプログラム

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

Hello, World!を実行する[編集]

開発環境が整ったら下ののソースコードを入力し、コンパイルしてほしい。

これは「hello, world」プログラムと呼ばれ、多くのプログラミングの入門書などで使われる伝統的なプログラムである。[1] 画面に「hello, world(改行)」と表示した後、ただちに終了する。

#include <stdio.h>

int main(void)
{
	printf("hello, world\n");
	return 0;
}


まず、プログラミングで文字入力のモードは、一般的に(Windowsでは)半角英数にしなければならない。空白の部分も(たとえば printf("hello, world\n");)、のprintfの直前の空白も、半角英数にしなければならない。

たとえ全角英数などの半角英数以外の文字入力モードで入力しても、実行しようとして実行ボタンを押してもエラーになり、実行できない。

例外として、文字表示の命令(たとえばprintfなど)または文字読み取り等をする場合にだけ、日本語など英語以外の文字を使える。しかし、それ以外の場合は、原則的に文字入力モードは半角英数である。

  • 1行目の#include <stdio.h>は、「stdio」という名の(画面に表示を行うなどの入出力のための)ファイルを準備する宣言です。文字を表示させる場合ですら、画面に表示をさせる動作ですので、stdio.hが必要になります。初心者のみなさんが作るファイルは、ほとんどの場合、画面になにかの表示を行うプログラムですので、当面のあいだは、かならず#include <stdio.h>を宣言することになります。

ちなみに、コード中のそれぞれの語句の発音は、一例だが、

#インクルード <エスティーデー.エイチ>

イント メイン(ボイド)
{
	プリントエフ("hello, world\n");
	リターン ゼロ;
}

のような発音になるだろう。(人によっては、細かい読み方がちがう。しかし初心者は、そこまで気にしなくていい。)

  • 2行目の空白は、単に読みやすくする目的で空白行を入れた。入れるかどうかは自由である。
  • 3行目から7行目まではmain関数の定義である。
    main関数とは、includeなどの初期化処理の後、いちばん最初に呼び出される「関数」と呼ばれる処理単位である。大まかに言うなら、初心者のうちは「どんなプログラムでも、main関数から開始する」と覚えても良い(ただし厳密に言うなら、includeなどのほうがmain関数よりも動作は先だろうが・・・)。main関数は、ひとつのファイル中に、main関数はひとつだけである。けっして、ひとつのファイル中に、main関数が、2つ以上あってはいけない。初心者むけのプログラムでは、ほぼたいてい、main関数が必要である。


main関数の内容の始まりを「{」で示し、内容の終わりは「}」で示す。

  • 4行目から7行目まではmain関数の内容が書かれている。ここではprintf関数の呼び出しの文とreturn文の2つの文が、main関数の処理としてまとめられている。それぞれの文の終わりには、「; (セミコロン)」が必要です。セミコロンがあることにより、C言語のコンパイラが、その文の終わりであることを認識します。
  • 5行目は標準ライブラリの内の1つであるprintf関数の呼び出しである。
    標準ライブラリとは、プログラミングでよく使われる処理がまとめられたもので、代表的なものには、入出力(stdio.h)、文字列操作(string.h)、数学(math.h)などがある。
    printf関数とは、標準出力に対して書式付の文章を書き込む関数である。標準出力はデフォルトでコンソール画面である。ここでは"hello, world\n"が標準出力に書き込む文章である。\nは逆斜線表記(エスケープシーケンス)の内の一つで改行を意味する。文の終わりには「; (セミコロン)」がつく。
  • 6行目はreturn文である。
    return文とは、実行中の関数の実行を終了し、制御をその呼び出し元に返す。ここではmain関数の終わりを意味している。「return 0;」の「0」は返却値(戻り値)と呼び、関数の呼び出し元に渡す数値であり、ここでは、ふつう、このプログラムを実行するオペレーティングシステムに対して渡され、0はプログラムの成功終了状態を表している。(なお、エラーがあった場合には、慣習では「1」以上の値を返却することになっている。)

なお、main関数を終了する}に到達した場合、main関数は値0を返すため、このreturn文は冗長であり、省略してもよい。文の終わりには「;(セミコロン)」がつく。

字下げ[編集]

#include <stdio.h>

int main(void)
{
printf("hello, world\n");
return 0;
}

このように書いてしまうと見づらい。動作はするのだが、人間にとってはとても読みづらい。 そのため

#include <stdio.h>

int main(void)
{
	printf("hello, world\n");
	return 0;
}

のように、 5行目と6行目は他の行より右から始まるのが良い。このような手法を字下げという。

字下げを入れるかどうかは自由である。

字下げの空白の文字入力モードは(Windowsでは)半角英数にしなければならない。


#include <stdio.h>

int main(void)
{
    printf("hello, world\n");
    return 0;
}

注釈、コメント[編集]

/* 文字列の表示 */
#include <stdio.h>

int main(void)
{
	printf("hello, world\n");
	return 0;
}

「/* 変数の宣言と代入 */」のように、「/*」と「*/」によって、プログラム内容の説明を追記できる。このような追記を注釈(ちゅうしゃく)またはコメントという。注釈は、機械語には変換されない。

注釈があると、他の人が読むときに、そのプログラムの内容が分かりやすくなので、必要に応じて注釈をつけるのが望ましい。


うまくコンパイルできない場合[編集]

コンパイルエラーが発生した場合、 エラーメッセージをメモし、ヘルプ機能などを使って調べてみてください。 また以下の項目も確認してみてください。

  • ソースコードを正しく入力したか。
    • スペルミスはないか。
    • 大文字と小文字を間違えていないか。
    • 「; (セミコロン)」を書き忘れていないか、または「: (コロン)」と間違えていないか。
    • 「{ } (中括弧)」を書き忘れていないか。
    • 最後の行の改行を省いていないか。
  • ファイルの保存形式は使用するコンパイラに適合しているか。
    • エンコードはUTF-8か、それともASCIIまたはシフトJISか。
    • ファイルの種類がテキスト形式以外、たとえばdocxなどになっていないか。
    • ファイル名やディレクトリ名が長すぎないか。(255文字や8.3文字などと制約がついている場合あり)
  • 環境変数を正しく設定したか。
    • コンパイラのディレクトリがPATHに設定されているか。
    • libやincludeのディレクトリがPATHに設定されているか。
  • すぐに終了してしまう。
    正しい動作です。もし、画面の表示を確認できないほど高速に終了してしまうなら、『コマンドプロンプト[2]』で実行すれば文字列が表示されているのを確認できると思います。またはgetch関数を用いてキー入力の後に終了するようにするとよい。(conio.hのインクルードが必要。)
    • Visual Studio Express 2012を使用する場合、以下の手順で「続行するには何かキーを押してください」を表示できる。
      • 「プロジェクト」→「(プロジェクト名)のプロパティ」→「構成プロパティ」→「リンカー」→「システム」→「サブシステム」を「コンソール」に変更し、「デバッグなしで開始」で開始する。

脚注[編集]

  1. ^ B.W.カーニハン/D.M.リッチー『プログラミング言語C 第2版 ANSI規格準拠』p.7のhello, worldプログラムを一部改変
  2. ^ Windows XP, Vista, 7, 8.1, 10ではcmd.exe

参考文献[編集]

  • 日本工業標準調査会『JISX3010 プログラム言語C』2003年12月20日改正

外部リンク[編集]

  • JISC 日本工業標準調査会
    『JISX3010:2003 プログラム言語C』は「JIS検索」→「JIS規格番号からJISを検索」で「X3010」と入力し「一覧表示」→「JISX3010」→「規格の閲覧」で閲覧できます。
    なお、Google Chromeでは閲覧できない模様。
    (2016年3月19日 (土)確認)