Hello, Worldプログラム | Programming Place Plus C言語編 第1章

トップページC言語編

このページの概要

以下は目次です。


Hello, Worldプログラム

このページから、本格的にC言語の学習に入っていきます。ここから先は、プログラミングとはどんなものなのか、どうやって書くのか、何が必要なのか、どうやって実行するのかといった事前の知識があるものとして進めます。前提知識に不安がある場合は先に、【導入】をひととおりお読みください。


【導入】初めてのC言語プログラミング」のページで登場した Hello, Worldプログラムを再び取り上げ、その内容をきちんと理解することから始めます。

Hello, Worldプログラムのソースコードは、以下のとおりです。

#include <stdio.h>

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

実行すると、次の結果が得られます。

実行結果:

Hello, World

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

画面に「表示」という表現を使いましたが、今後のためにも、画面に出力 (output) するという表現を使うことにしましょう。プログラムには、入力 (input) と出力が付きものです。

入力とは、たとえばキーボードから文字を打ち込んだり、ファイルの内容を読み取ったりすることを指します。また、出力とは、画面に文字や数字を表示したり、ファイルに結果を書き出したりすることを指します。

#include <stdio.h>

Hello, Worldプログラムの先頭には #include <stdio.h> があります。#include は「シャープインクルード」とか単に「インクルード」と読みます。<stdio.h> はそのまま「エスティーディーアイオードットエイチ」とか「スタンダードアイオードットエイチ」と呼びます。この記述は stdio.hインクルード (include) せよ」という意味になります。

stdio.h をインクルードするとは、「stdio.h というファイルの中身を取り込む」ということです。stdio.h というファイルは、C言語の開発環境を準備したときに、パソコンのどこかに作られています。その中身を、#include <stdio.h> と書いた部分を置き換えるかのように、取り込んでくるという指示をしています。

stdio.h には、C言語が標準で用意している機能のいくつかが書き込まれています。そういった機能を使いたいときに、インクルードを行う必要があります。Hello, Worldプログラムの場合、あとで説明する puts関数という機能を使いたいので、そのために #include <stdio.h> が必要です。使いたい機能に応じて、インクルードするファイルは異なります。

インクルードに関する詳細は、第23章であらためて取り上げます。

main関数

int main(void) という部分は、main関数 (main function) の記述を開始しています。

関数 (function) とは、「コンピュータに行わせる仕事をソースコードとしてまとめたもの」です。{ から } のあいだに、行わせたい処理を記述します。

関数については、第9章で詳しく説明します

main関数は、C言語のプログラムのスタート地点とみなされる特別な関数です。そのため、原則として main関数は必ず記述しなければなりません。ただし例外として、組み込み系でよくあるような、OS が存在しない環境で実行するプログラムの場合には、main 以外の関数をスタート地点にすることがあります。

【上級】OS の支援を受けずにプログラムを実行する環境を、フリースタンディング実行環境 (freestanding execution environment) と呼びます。これに対して、OS の支援の上で動作できる環境をホスト実行環境 (hosted execution environment) と呼びます。

プログラムが実行されると、main関数の {} の内側に書いた処理が、上から下に向かって順々に進んでいきます。} のところにまで到達すると、プログラムの実行が終了します。

intvoid は、C言語に用意されている機能を表しています。もちろん何かしらの意味をもっているのですが、今のところは意識する必要がないので深入りしないことにします。なお、int や void のような、C言語のルールとして、何かしらの意味が与えられている単語をキーワード (keyword) といいます。

puts関数

puts("Hello, World"); の部分は、puts関数を使用しています。

puts関数は、指定した文字列 (string) を画面に出力し、さらに改行 (newline) も行います。

関数の名前に貼られたリンクは、リファレンスページへ飛びます。この先でも、言語に用意されている機能については、リファレンスページへ飛ぶリンクを適宜貼っています。ただし、リファレンスは、中級者以上の方にとって特に有用なように作っているので、現時点での完全な理解は難しいと思います。

文字列とは、いくつかの文字が並んだデータのことです。ソースコードに文字列を記述するときには、"" で囲みます。この記述のことを、文字列リテラル (string literal) と呼びます。

"" のように中身がないものも文字列とみなせます(よく、空文字列 (empty string) と呼ばれます)。また、ソースコードに記述された文字列を、文字列リテラル (string literal) と呼びます。

また、関数を使うことを、関数を呼び出す (call) と表現します。

return文

return 0; の部分は return文 (return statement) と呼ばれます。return はキーワードです。

return の後ろに 0 という数値が付いていますが、とりあえず必要なものであると思っておいてください。

プログラムの実行中に return文のところに来ると、関数内の処理がそこで終了します。main関数内の return文が実行されると、main関数内の処理がその時点で終了します。

実のところ、main関数での return 0; は省略できます。省略した場合は、main関数の終わりをあらわす } の直前に、あたかも return 0; があるかのように扱われます1C言語編としては、今後は省略することにします。

main関数で return 0; を省略できるようになったのは、C99 からです。古いバージョンのC言語では省略せずに書かなければなりません。

セミコロン

puts関数を呼び出している行や、return文のある行には、末尾にセミコロン (;) があります。これは、 (statement) の終わりを表す記号です。C言語では、改行によって文が終わるわけではありません。そのため、セミコロンを使って、明確に終わりを示す必要があります。

セミコロンが登場すれば文の終わりが示せるので、次のように1行に2つ以上の文を置くこともできます。

#include <stdio.h>

int main(void)
{
    puts("Hello.");  puts("Hello.");
}

実行結果:

Hello.
Hello.

左側にある文が先に実行され、次にその右側の文、さらにあればその右の文へと続いていきます。ただし、基本的には1行1文を守った方が見やすいでしょう。1行に文が複数あると、2つ目以降の文の存在を見落としやすいです。

また、セミコロンしかない文も許されます。これは、空文(くうぶん)(null statement) と呼ばれ、何もしない文です。

int main(void)
{
    ;
}

実行結果:

空文は、何も処理を行わないことを明確にするために使われることがあります。

記述の自由度について

C言語では、空白 (space) や改行 を入れる位置は、ほぼ自由です。“ほぼ” というのは、「void」のようなキーワードを分断して「vo id」のようにするといったことはできないからです。「main」も意味をもった単語なので「ma in」のようなことはできません。

このような自由度があるため、次のどのコードも正しく、同じ意味です。

int main(void)
{
    puts("OK!");
}
int     main    (   void    )
{
    puts(
        "OK!"
            );
}
int main(void)
{

    puts(  "OK!"  );


}
int
main
(
void
)
{
puts("OK!");
}

また、空白については、いわゆる半角スペースのほかに、タブ文字も許可されます。

どの書き方も文法上は正しいのですが、実際には冒頭で紹介した書き方が多く使われます。何を基準にすればいいかは、人によって言い分があるのですが、ソースコードは、見やすく分かりやすく書くことが求められます。なぜなら、ソースコードを見たり、読み解いたりするのは自分だけではないからです。仕事やサークルなど、多人数で1つのプログラムを作り上げていくことがありますから、できる限り、誰もが読みやすいソースコードを目指してください。


puts("OK");puts( "OK" ); のように書いても同じ意味になりますが、puts(" OK "); と書くと意味が違ってしまいます。"" に囲まれた部分は1つの文字列を表現したものなので、"OK" は OK という2文字ですが、" OK " は前後に空白がある合計4文字の文字列です。


練習問題

問題① 次のプログラムのエラーを指摘してください(複数あります)。

include <stdio.h>

int Main{}
{

    puts("Hello,     World")

}

問題② 次のプログラムの問題点を指摘してください。

    #include <stdio.h>

    int      main(void)
{


puts
(
    "Hello, World"
    );
        }

問題③ 以下の実行結果になるように、プログラムを作成してください。

12345

問題④ 以下の実行結果になるように、プログラムを作成してください。

1
2
3


解答ページはこちら

参考リンク


更新履歴



次の章へ (第2章 加算・減算と結果の出力)

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

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る