Modern C++編【言語解説】 第1章 Hello, Worldプログラム

先頭へ戻る

この章の概要

この章の概要です。


最小の C++プログラム

まずは、C++ の最も小さなサンプルプログラムを取り上げます。

int main()
{
}

実行結果:




C++ として有効な最も小さいプログラムは、上記のようになります。実行しても何もせずに終了します。

C言語と同様に、プログラムの開始位置となるので、main関数は必須です。引数と戻り値の組み合わせは、以下のいずれかです。

コンパイラが独自に、他の形の main関数を許している可能性はあります。

仮引数が空になっている方は、C言語において void を指定していたときと同じ意味です。このように C++ では、仮引数の void は省略できます。void と明示的に書いても構いませんが、一般的に C++ では省略します。

引数がある方の main関数は、コマンドライン引数を受け取るための形式です。詳細は、C言語編第45章を参照してください。

また、C++ では、main関数内の return文は省略することができ、その場合、関数の末尾に return 0; と書いたときと同じ結果になります。これは一般的とまでは言えないと思いますが、本サイトの C++プログラムでは省略することにします。

C言語と違って(C言語編第53章)、main関数は再帰呼び出しできません。

main関数はオーバーロード(第10章)できません。

Hello, Worldプログラム

今度は、C++版の Hello, Worldプログラムを作ってみましょう。

C言語版の Hello, Worldプログラムは、C言語編第2章で説明しています。

まず、C++ は、C言語の機能が使えるので、C言語と同じような書き方ができます。

#include <stdio.h>

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

実行結果:

Hello, World

しかし、C++ では <stdio.h> を #include するという行為自体が、あまり一般的ではありません。通常、次のように書きます。

#include <cstdio>

int main()
{
    std::puts("Hello, World");
}

実行結果:

Hello, World

この違いについての詳しい解説は、【標準ライブラリ】第1章を参照してください。

さらに言えば、C++ には新たな入出力機能があるので、そちらを使うことが、より C++らしい書き方です。次のようになります。

#include <iostream>

int main()
{
    std::cout << "Hello, World" << std::endl;
}

実行結果:

Hello, World

<<演算子が使われていますが、もちろんシフト演算(C言語編第49章参照)をしている訳ではありません。C++ には、演算子を適用する型に応じて、効果を変える方法があるので、この機能を使って意味を変更しているのです。

この機能は、演算子のオーバーロードと呼ばれます。第28章参照で取り上げます。

また、std::cout は標準出力ストリームを意味しており、std::endl は改行文字+フラッシュを意味します。これらを使うためには、iostream というヘッダを #include する必要があります。

std::cout や std::endl については、【標準ライブラリ】第16章で取り上げています。

このプログラムの処理のイメージは、「"Hello, World"」と「改行文字 + フラッシュするという指令」を標準出力ストリームへ送っているということです。どこかへ「送る」というイメージを、<<演算子で表現している訳です。左方向へ送っているように見えますね?

コメント

C++ では、C言語(C95まで) の /* ~ */ という形式のコメントのほかに、// 形式のコメントが使えます

C言語でも、C99規格からは // 形式のコメントを使えます(C言語編第5章)。

// 形式のコメントは、「//」からその行の行末までをコメント化します。複数行をまとめてコメントにできませんが、終端の記号を書かなくて良くなります。大抵のコメントは、1行で完結するので、入力の手間が減らせます。

以下は使い方の例を示したものです。

#include <iostream>

int main()
{
    // 下の文は、puts("Hello, World"); と同じ結果になる
    std::cout << "Hello, World" << std::endl;
}

実行結果:

Hello, World

C++プログラマのほとんどは、複数行をまとめてコメントアウトしたり、文の途中を部分的にコメントアウトしたりするのでなければ、//コメントの方を使います。

複数行のコメントアウトには、#if 0 ~ #endif を使った方が、ネストの間違いを防げて良いとも言われています。


練習問題

問題① iostreamヘッダの機能を使う形で、実行結果が次のようになるプログラムを作成してください。

Hello,
World

問題② コマンドライン引数を1行に1つずつ、標準出力へ出力するプログラムを作成してください。


解答ページはこちら

参考リンク



更新履歴

'2018/7/20 C++編での記述に合わせる形に修正。

'2017/7/3 新規作成。



前の章へ (第0章 はじめに)

次の章へ (第2章 C言語との差異)

Modern C++編のトップページへ

Programming Place Plus のトップページへ


はてなブックマーク Pocket に保存 Twitter でツイート Twitter をフォロー
Facebook でシェア Google+ で共有 LINE で送る rss1.0 取得ボタン RSS
管理者情報 プライバシーポリシー