C++で「Hello World」を表示するプログラムは、C++を学び始めるときに最初に扱われる代表的なサンプルです。
非常に短いコードですが、#include、main関数、std::cout、文字列、セミコロン、コンパイルなど、C++の重要な基本要素が含まれています。
まずは、もっとも基本的なコードを確認してみましょう。
#include <iostream>
int main() {
std::cout << "Hello, World!\n";
return 0;
}
実行すると、次のように表示されます。
Hello, World!
それぞれのコードが何を意味しているのか、順番に詳しく解説します。
C++のHello Worldの基本構造
C++のHello Worldプログラムは、大きく分けると次の要素で構成されています。
<iostream>ヘッダーのインクルードmain関数std::cout- 文字列リテラル
- 改行
return 0;
一つずつ理解していきましょう。
#include <iostream>とは
最初の行には、次のコードがあります。
#include <iostream>
#includeは、C++のプリプロセッサディレクティブの一つです。
ここでは、標準入出力に関する機能を利用するために<iostream>ヘッダーをインクルードしています。
<iostream>を利用することで、代表的には次の機能を使用できます。
std::cout
std::cin
std::cerr
std::clog
それぞれの主な役割は次のとおりです。
| 機能 | 主な用途 |
|---|---|
std::cout | 標準出力へ文字列や数値などを出力する |
std::cin | 標準入力からデータを受け取る |
std::cerr | エラー情報などを標準エラー出力へ送る |
std::clog | ログ情報などを標準エラー出力へ送る |
Hello Worldでは、文字列を表示するためにstd::coutを使用します。
main関数とは
C++のプログラムでは、次のようなmain関数を記述します。
int main() {
}
main関数は、C++プログラムにおける主要な実行開始地点です。
通常は、プログラムの実行が開始されると、ランタイムや静的オブジェクトなどに必要な初期化処理が行われたあと、main関数の処理が実行されます。
初心者向けには、「C++プログラムの処理を書く中心的な開始地点」と理解しておけばよいでしょう。
intの意味
main関数の前には、次のようにintが付いています。
int main()
intは、C++で整数型を表すキーワードです。
ここでは、main関数が整数値を返すことを意味しています。
main関数が返す整数値は、プログラムの終了状態を実行環境へ伝えるために利用されます。
std::coutとは
Hello Worldを実際に出力しているのが、次の部分です。
std::cout << "Hello, World!\n";
std::coutは、C++で標準出力へデータを書き込むためのオブジェクトです。
コンソールプログラムでは、通常、標準出力がターミナルやコマンドプロンプトなどに接続されています。
そのため、std::coutへ文字列を送ることで、画面上に文字を表示できます。
<<の意味
std::coutでは、次のように<<を使用します。
std::cout << "Hello";
この<<は、出力ストリームに対する挿入演算子として使用されています。
初心者向けには、右側のデータを左側のstd::coutへ送り込む記号と考えると分かりやすいでしょう。
たとえば、次のコードでは、
std::cout << "Hello";
次の文字列が表示されます。
Hello
数値を出力することもできます。
std::cout << 100;
実行結果は次のとおりです。
100
"Hello, World!"は文字列リテラル
次の部分は文字列です。
"Hello, World!"
C++では、ダブルクォーテーション"で囲んだ文字の並びを文字列リテラルとして扱います。
そのため、
std::cout << "Hello, World!";
と記述すると、
Hello, World!
と表示されます。
日本語を表示することもできる
次のように日本語を記述することもできます。
std::cout << "こんにちは\n";
ただし、日本語が正しく表示されるかどうかは、ソースファイルの文字コードやコンパイラ、ターミナルの文字コード設定などにも影響されます。
そのため、環境によっては文字化けする可能性があります。
C++で改行する方法
Hello Worldでは、文字列を表示したあとに改行することが一般的です。
C++では、代表的に\nとstd::endlを使用できます。
\nを使って改行する
もっともシンプルな方法が\nです。
std::cout << "Hello, World!\n";
\nは改行文字を表します。
そのため、Hello, World!を表示したあとに改行されます。
std::endlを使って改行する
次のように書くこともできます。
std::cout << "Hello, World!" << std::endl;
std::endlも改行を行います。
ただし、\nと完全に同じではありません。
std::endlは改行を行ったうえで、出力ストリームをフラッシュします。
\nとstd::endlの違い
単純に改行したいだけであれば、次のように\nを使うことが一般的です。
std::cout << "Hello, World!\n";
一方、
std::cout << "Hello, World!" << std::endl;
では、改行に加えて出力のフラッシュが行われます。
頻繁なフラッシュはパフォーマンスに影響する場合があるため、特別な理由がなければ\nを使用するケースも多く見られます。
return 0;とは
main関数の最後には、次のコードがあります。
return 0;
これは、main関数を終了して整数値の0を返す処理です。
一般的に、0はプログラムが正常終了したことを表します。
int main() {
std::cout << "Hello, World!\n";
return 0;
}
このプログラムでは、
Hello, World!を出力する0を返す- プログラムを正常終了する
という流れになります。
main関数ではreturn 0;を省略できる
C++では、main関数の最後まで処理が到達した場合、return 0;を記述したものとして扱われます。
そのため、次のコードも正しいC++です。
#include <iostream>
int main() {
std::cout << "Hello, World!\n";
}
ただし、このルールは一般的なint型の関数すべてに適用されるものではありません。
main関数に対して特別に認められている動作です。
初心者向けの学習では、終了ステータスについて理解しやすくするために、
return 0;
を明示しておいてもよいでしょう。
std::とは
C++初心者が疑問に感じやすい部分の一つが、
std::cout
に付いているstd::です。
stdは、C++標準ライブラリで使用されている名前空間です。
名前空間とは
名前空間は、関数や変数、クラスなどの名前が衝突することを防ぐための仕組みです。
たとえば、
std::cout
は、
stdという名前空間に存在するcout
という意味になります。
同様に、
std::string
はstd名前空間にあるstringを意味します。
using namespace std;とは
C++の入門書などでは、次のようなコードを見かけることがあります。
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}
using namespace std;を記述すると、std::を省略できます。
つまり、
std::cout
を、
cout
と記述できます。
同様に、
std::endl
を、
endl
と書けます。
std::を明示する書き方がおすすめ
短い学習用プログラムであれば、using namespace std;を使用しても動作上は問題ありません。
ただし、規模の大きなプログラムでは、異なる名前空間にある同名の識別子が衝突する可能性があります。
特に、ヘッダーファイル内で、
using namespace std;
を記述することは避けるのが一般的です。
初心者の段階から、
std::cout
std::string
std::vector
のように名前空間を明示する書き方に慣れておくとよいでしょう。
C++のHello Worldを実行する流れ
C++では、ソースコードを書いただけでは通常そのまま実行できません。
一般的には、次の流れでプログラムを実行します。
ソースコードを作成する
↓
コンパイルする
↓
実行ファイルを生成する
↓
実行する
ソースファイルを作成する
まず、テキストエディタや統合開発環境を使用してC++コードを記述します。
#include <iostream>
int main() {
std::cout << "Hello, World!\n";
return 0;
}
ファイル名は、たとえば次のようにします。
hello.cpp
C++のソースファイルでは、一般的に.cppという拡張子が使用されます。
g++でHello Worldをコンパイルする方法
GCC環境でC++プログラムをコンパイルする場合は、g++を使用できます。
たとえば、ターミナルで次のコマンドを実行します。
g++ hello.cpp -o hello
それぞれの意味は次のとおりです。
g++
C++コードをコンパイル・リンクするために使用されるGCCのコンパイラドライバーです。
hello.cpp
コンパイルするC++ソースファイルです。
-o hello
生成する実行ファイルの名前をhelloに指定しています。
LinuxやmacOSで実行する
コンパイル後は、一般的に次のように実行します。
./hello
すると、
Hello, World!
と表示されます。
WindowsのPowerShellで実行する
Windows環境でhello.exeが生成された場合、PowerShellでは次のように実行できます。
.\hello.exe
実行すると、
Hello, World!
と表示されます。
使用しているシェルや開発環境によって、実行方法は多少異なります。
C++のバージョンを指定してコンパイルする方法
g++では、使用するC++規格を指定できます。
C++17の場合
g++ -std=c++17 hello.cpp -o hello
C++20の場合
g++ -std=c++20 hello.cpp -o hello
C++23の場合
g++ -std=c++23 hello.cpp -o hello
ただし、利用できるC++規格や機能は、使用しているコンパイラや標準ライブラリのバージョンによって異なります。
Visual StudioでHello Worldを表示する方法
Windowsでは、Microsoft Visual Studioを利用してC++プログラムを作成することもできます。
大まかな流れは次のとおりです。
- Visual Studioをインストールする
- C++開発用ワークロードをインストールする
- コンソールアプリケーションを作成する
- C++コードを記述する
- ビルドする
- プログラムを実行する
使用するコードは基本的に同じです。
#include <iostream>
int main() {
std::cout << "Hello, World!\n";
return 0;
}
Visual Studioでは、コンパイルやデバッグをGUIから実行できるため、初心者にも利用しやすい開発環境です。
Visual Studio CodeでHello Worldを実行する方法
Visual Studio CodeでもC++を開発できます。
ただし、Visual Studio Codeは基本的にはコードエディタです。
Visual Studio Codeをインストールしただけでは、通常、C++コンパイラは自動的に用意されません。
そのため、使用するOSに応じてGCC、Clang、MSVCなどのC++コンパイラを別途用意する必要があります。
C/C++向けの拡張機能を導入すると、入力補完やデバッグなども利用しやすくなります。
複数の文字列を表示する方法
std::coutでは、<<を連続して使用できます。
#include <iostream>
int main() {
std::cout << "Hello" << " " << "World!\n";
return 0;
}
実行結果は次のとおりです。
Hello World!
文字列だけでなく、数値も同時に出力できます。
#include <iostream>
int main() {
std::cout << "Number: " << 100 << '\n';
return 0;
}
実行結果は次のとおりです。
Number: 100
複数行を表示する方法
複数行の文字列を出力することもできます。
#include <iostream>
int main() {
std::cout << "Hello\n";
std::cout << "World\n";
return 0;
}
実行すると、
Hello
World
と表示されます。
次のように、一つの文字列としてまとめることもできます。
std::cout << "Hello\nWorld\n";
変数の値を表示する方法
std::coutは、変数の値を確認するときにも利用できます。
#include <iostream>
int main() {
int number = 10;
std::cout << "number = " << number << '\n';
return 0;
}
実行結果は次のとおりです。
number = 10
このように、文字列と変数を<<で連結しながら出力できます。
プログラムの動作確認や簡単なデバッグでも頻繁に使用される方法です。
Hello Worldでよくあるエラー
C++初心者の場合、短いHello Worldプログラムでも入力ミスによってコンパイルエラーが発生することがあります。
代表的な例を確認しておきましょう。
セミコロンを書き忘れる
次のコードにはセミコロンがありません。
std::cout << "Hello, World!"
正しくは次のようにします。
std::cout << "Hello, World!";
C++では、多くの文の末尾に;が必要です。
ダブルクォーテーションを書き忘れる
次のコードは正しくありません。
std::cout << Hello World;
文字列を表示する場合は、ダブルクォーテーションで囲みます。
std::cout << "Hello World";
<iostream>をインクルードしていない
次のように、
int main() {
std::cout << "Hello, World!\n";
}
<iostream>をインクルードしないままstd::coutを使用すると、通常は必要な宣言が見つからずコンパイルエラーになります。
そのため、先頭に次のコードを記述します。
#include <iostream>
std::を書き忘れる
次のように、
cout << "Hello, World!";
と記述すると、coutが見つからないというエラーになる可能性があります。
基本的には、
std::cout << "Hello, World!";
と記述します。
using namespace std;を使用している場合は省略できますが、初心者のうちはstd::を付ける書き方に慣れておくとよいでしょう。
C++23ではstd::printlnも利用できる
C++23では、標準出力を行う新しい方法としてstd::printやstd::printlnが標準ライブラリに追加されました。
対応している環境であれば、次のように記述できます。
#include <print>
int main() {
std::println("Hello, World!");
}
実行すると、
Hello, World!
と表示されます。
std::printlnは、文字列を出力したあとに改行します。
ただし、使用しているコンパイラがC++23に対応していても、標準ライブラリ側の実装状況によっては<print>を利用できない場合があります。
そのため、C++初心者が最初に覚える方法としては、現在でも次の書き方が分かりやすいでしょう。
#include <iostream>
int main() {
std::cout << "Hello, World!\n";
return 0;
}
Hello Worldから学べるC++の基礎
Hello Worldは非常に短いプログラムですが、C++の重要な基礎を数多く学べます。
主な内容としては、次のものがあります。
- ヘッダー
#includemain関数- 戻り値
- 整数型
- 名前空間
std::cout- ストリーム
<<演算子- 文字列リテラル
- 改行
- セミコロン
- ソースファイル
- コンパイラ
- コンパイル
- 実行ファイル
単純にコードを暗記するだけではなく、一行ずつ意味を理解しておくことで、変数や条件分岐、繰り返し処理、関数などを学ぶときにも理解しやすくなります。
C++でHello Worldを表示する方法のまとめ
C++でHello Worldを表示する基本コードは、次のとおりです。
#include <iostream>
int main() {
std::cout << "Hello, World!\n";
return 0;
}
#include <iostream>によって標準入出力に必要な機能を利用できるようにし、main関数の中でstd::coutを使って文字列を標準出力へ送ります。
"Hello, World!"は文字列リテラルで、\nは改行を表します。
また、return 0;はプログラムが正常に終了したことを表すために使用されます。
C++では一般的に、ソースコードをGCC、Clang、MSVCなどの処理系でコンパイルしてからプログラムを実行します。
Hello Worldは単なる文字表示の練習ではありません。
C++におけるプログラムの基本構造、標準ライブラリ、名前空間、出力処理、コンパイルなどをまとめて学べる重要なサンプルです。
以上、C++でHello Worldを表示する方法についてでした。
最後までお読みいただき、ありがとうございました。
