この記事では、C/C++のfor文の基本構文とその処理の流れについて記載しています。
for文は同じ処理を繰り返し実行したい場合に使用されます。
for文の基本構文
for文の基本構文である「for (初期化文 条件式; 式) 処理文」を使用したサンプルコードと出力結果です。
内容は1から入力した数までを全て合計(1+2+…+(入力した整数))した時の値を算出するものです。
#include <iostream> // std::cout std::cin 使用のため
int main(void) {
// 入力部
int ival = 0;
std::cout << "正の整数を入力してください: ";
std::cin >> ival;
int sum = 0; // 合計値
// for文の基本構文
for (int i = 1; i <= ival; i++) sum = sum + i;
std::cout << "1 ~ " << ival << " の合計値は " << sum << " です。" << std::endl;
return 0;
}
正の整数を入力してください: 3
1 ~ 3 の合計値は 6 です。
3を入力した場合(1+2+3)が算出されています。
for文の基本構文の各要素である初期化文は「int i = 1;」、条件式は「i <= ival」、式は「i++」、処理文は「sum = sum + i;」が該当しています。
for文の実行順序について
次にfor文の基本構文の各要素がどのような順番で実行されているかを確認してみます。下記は構文のそれぞれの要素を関数化して実行時に文字を出力するようにしたサンプルコードと出力結果です。
#include <iostream>
int InitStatement() {
std::cout << "初期化文" << std::endl;
return 0;
}
bool Condition(int i, int ival) {
bool b = i <= ival;
std::cout << "条件式 " << i << " <= " << ival << " (" << std::boolalpha << b << ")" << std::endl;
return b;
}
void Expression(int& i) {
i++;
std::cout << "式 i = " << i << std::endl;
}
void ExeStatement(int& sum, int i) {
sum = sum + i;
std::cout << "処理文 sum = " << sum << std::endl;
}
int main(void) {
// 入力部
int ival = 0;
std::cout << "正の整数を入力してください: ";
std::cin >> ival;
std::cout << std::endl;
int sum = 0; // 合計値
// for文の基本構文 : その1
std::cout << "----------for文開始----------" << std::endl;
for (int i = InitStatement(); Condition(i, ival); Expression(i)) {
ExeStatement(sum, i);
}
std::cout << "----------for文終了----------" << std::endl;
std::cout << std::endl << "1 ~ " << ival << " の合計値は " << sum << "です。" << std::endl;
return 0;
}
正の整数を入力してください: 3
----------for文開始----------
初期化文
条件式 0 <= 3 (true)
処理文 sum = 0
式 i = 1
条件式 1 <= 3 (true)
処理文 sum = 1
式 i = 2
条件式 2 <= 3 (true)
処理文 sum = 3
式 i = 3
条件式 3 <= 3 (true)
処理文 sum = 6
式 i = 4
条件式 4 <= 3 (false)
----------for文終了----------
1 ~ 3 の合計値は 6です。
出力の通り処理の順番は初期化文⇒条件式⇒処理文⇒式の順番で実行されます。ただし初期化文に関しては最初の1度だけ実行されています。
for文を構成する各要素は、初期化文と処理文に関しては空文「;」とする必要がありセミコロンが必要ですが、全て省略することが可能です。記述としては「for (;;) ;」となりますが、あくまで構文的には問題ないというだけで、無限ループかつ処理文なしという処理になるためこれが実際に使われるケースはない認識です。ただし、全てではないにしても初期化文、条件式、処理文、式のいずれか、あるいは複数省略されたfor文が使用されているケースはあります。その場合の多くはコードを書いた人が意図的に省略しているケースが多いため例えばその部分に修正を入れる場合は、その効果や処理順序を十分に理解したうえで修正する必要があります。
まとめ
C/C++のfor文の基本構文とその処理の流れについてまとめてみました。
本記事の内容が訪問頂いた貴方のお役に立てれば幸いです。
内容の正確性には可能な限り配慮しておりますが、誤りや見落としが含まれる場合があります。
また、学習の進行や考え方の変化により記事の内容は随時加筆・修正される場合がありますので、あらかじめご了承いただけますと幸いです。