C言語編 第2章 Hello, Worldプログラム

先頭へ戻る

このエントリーをはてなブックマークに追加

この章の概要

この章の概要です。

Hello, Worldプログラム

「Hello, Worldプログラム」とは、新しいプログラミング言語の学習を始めるときに、 ひとまず試してみるお約束のプログラムのことです。 画面上に「Hello, World」と表示させてみるという内容であるため、このように呼びます。 この章では、C言語による Hello, Worldプログラムを作ってみます。

さて、画面に「表示」という表現を使いましたが、今後のためにも、画面に「出力」という表現を使うことにしましょう。 プログラムには、入力出力が付きものです。 C言語の学習で行う入力とは、キーボードから文字を打ち込んだり、Windowsなどでの「ファイル」の情報を読み込んだりすることを指します。 また、出力とは、画面に文字や数字を表示したり、「ファイル」に結果を書き出したりすることを指します。

puts関数を使う

では早速、プログラムを作ってみましょう。

#include <stdio.h>

int main(void)
{
	puts( "Hello, World" );

	return 0;
}

実行結果:

Hello, World

前章で見た最小限のプログラムから、色々と増えています。 順番に説明していきます。

まず、先頭の「#include <stdio.h>」の部分です。 これは「シャープ インクルード スタンダードアイオードットエイチ」と読みます。 意味の詳細な説明は現時点では難しいのでしませんが(第23章で取り上げます)、 この後すぐに説明する puts関数などのC言語に用意された機能を使うために必要になります。

次に、main関数の部分ですが、前章のサンプルには無かった「int」という文字が加わっています。 実はこれは、Hello, Worldプログラムとは別段関係しませんが、今後のサンプルでは常に書くことにします。 これを書くのと書かないのとでは、動作に一切変化はありませんが、一般的には書くことが多いと思います。 詳細な説明はいずれ行います。

次が、最も肝心な部分です。 「puts( "Hello, World" );」という記述により、「"Hello, World"」という文字の並びを画面に出力しています。 これは puts関数という、C言語に用意されている関数の1つです(⇒リファレンス)。 前章で書いたように、「関数」とは「複数の処理をまとめたもの」です。 puts関数であれば、「画面上に指定された文字の並びを出力するための処理をまとめたもの」ということになります。

さて、「"Hello, World"」の部分ですが、C言語において、2つの " で囲まれた文字の並びのことを、 文字列リテラル(文字列定数)と呼びます。 単に文字列と呼んでしまうこともありますが、微妙な違いを持っている場合もありますから、 差し当たっては、2つの " で囲まれていたら、文字列リテラルであるという点だけ押さえておきましょう。

なお「""」のように、中身が何もないことも許されています。この場合も、やはり文字列リテラルと呼びます (空の文字列リテラルと呼んでも構いません)。

printf関数を使う

画面に文字の並びを出力する方法は、puts関数だけではありません。 よく使われるもう1つの方法は、printf関数を使うというものです。 (⇒リファレンス

実は、printf関数の方が、puts関数と比べると、出来ることが豊富です。 そのため、printf関数の使い方さえ知っていれば困ることはありませんが、逆に多機能過ぎるという問題があります。 プログラミングの世界ではいつもそうですが、多機能であることは良いことばかりではなく、 「理解が大変」「だから間違った使い方をしてしまいやすい」「実行の際、色々な処理を行う必要があり効率が悪くなりやすい」 などの問題が潜んでいます。ですから、シンプルな puts関数には、それなりの良さがある訳です。

さて、printf関数を使って、先ほどの Hello, Worldプログラムを書き換えると、次のようになります。

#include <stdio.h>

int main(void)
{
	printf( "Hello, World\n" );

	return 0;
}

実行結果:

Hello, World

puts関数を使っていた部分が、printf関数に変わっただけですが、よく見ると「"Hello, World"」の末尾の部分に「\n」が追加されています。 この「\n」という記述があることで、画面上で「改行」が行われるようになります。 実は、puts関数の場合には、「\n」を付けなくても、自動的に改行が行われます。 そのため、まったく同じ実行結果を作り出すには、printf関数の場合は「\n」を付ける必要があります ( puts関数で「\n」を使うこともできますが、最後に改行する用途としては必要ないはずです)。

多くの場合、1つの文字の並びを出力するたびに改行するのが普通です。 ですから、printf関数よりも、自動的に改行してくれる puts関数の方がお手軽感があります。 しかし逆に、都合により改行したくないという要求は、puts関数では実現できません。

ただし、プログラムを実行する環境によっては、最後に改行を行わないと、出力が正しく行えないことがあります。 そのため、「\n」を付けずに printf関数を使うこと自体は合法ですが、最終的には改行を行うべきです。 例えば、次のように書きます。

#include <stdio.h>

int main(void)
{
	printf( "Hello, " );
	printf( "World\n" );

	return 0;
}

実行結果:

Hello, World

ここで、C言語のプログラムは main関数から開始されることは前章でも書きましたが、 その後は、上から下に向かって実行されることを付け加えておきます。 ですから、上のプログラムは、先に「"Hello, "」が出力され、その後で「"World\n"」が出力されます。

ちなみに、「\n」を末尾に付けずに途中に入れ込むことも可能です。 次のようになります。

#include <stdio.h>

int main(void)
{
	printf( "Hello,\nWorld\n" );

	return 0;
}

実行結果:

Hello,
World

実行結果を見ればわかるように、確かに「\n」を書いた位置で改行が行われています。 このような書き方もできますが、パッと見で分かりにくいという問題はあります。 実行効率的には幾分かよくなりますが、基本的に現代のプログラミングの世界では、分かり易さの方が重要視されます。


練習問題

問題@ puts関数を使って、画面に「1行目」「2行目」「3行目」と出力するプログラムを作成して下さい。 もちろん、それぞれ改行を行って出力します。

問題A 問題@と同じ出力結果になるプログラムを、printf関数を3回使って作成して下さい。

問題B 問題@と同じ出力結果になるプログラムを、printf関数を1回だけ使って作成して下さい。

問題C どの関数を使っても構わないので、

実行結果:

1行目

3行目

のように、「2行目」の部分が抜けた出力結果になるようなプログラムを作成して下さい。


解答ページはこちら

参考リンク

更新履歴

'2009/3/2 「この章の概要」を追加。

'2008/8/30 新規作成。



前の章へ

次の章へ

C言語編のトップページへ

Programming Place Plus のトップページへ