C/C++でif文とelse文を両方同時に実行するテクニック
この記事では、C言語やC++のコードでifブロックとelseブロックを両方実行する方法を解説します。少しトリッキーな手法ですが、プログラムの制御フローへの理解を深めるのに役立つテクニックです。
通常、if文とelse文は条件判定によってどちらか一方のみが実行されます。しかし、goto文とラベルを組み合わせることで、あたかもif-elseが存在しない場合のように、両方のブロックを次々に実行させることができます。
サンプルコード
#include <iostream>
using namespace std;
int main() {
int x = 10;
if(x > 5) {
lebel_1: cout << "This is inside if statement" <<endl;
goto lebel_2;
}else{
lebel_2: cout << "This is inside else statement" <<endl;
goto lebel_1;
}
}実行結果
This is inside if statement This is inside else statement This is inside if statement This is inside else statement This is inside if statement This is inside else statement This is inside if statement This is inside else statement .... .... ....
コードの仕組み
このプログラムは無限ループとして動作します。最初に条件 x > 5 が評価されると、ifブロック内の処理が実行され、その後 goto文によって強制的にelseブロックへ制御が移ります。elseブロック内でも再びgoto文がifブロックへ制御を戻すため、両方のブロックが交互に実行され続けます。
ポイントは、一度最初の条件判定が終われば、その後の条件チェックは出力に一切影響しないという点です。goto文が直接ラベルへジャンプするため、if文による分岐自体がスキップされる仕組みになっています。
注意点:goto文の使用について
ここでは、ifブロックからelseブロックへ、そしてelseブロックからifブロックへと制御を強制的に移動させるためにgoto文を使用しています。しかし、実際の開発においてgoto文の使用は推奨されません。
goto文を乱用すると、プログラムの制御フローを追跡することが非常に難しくなり、コードの可読性や保守性が大きく損なわれます。この例はあくまでC/C++における制御構造の動作を理解するための学習用サンプルとして捉えてください。
-
C++でwhile文やif文の直後にセミコロンを付けるとどうなる?
はじめにC++では、while文やif文の直後にうっかりセミコロン(;)を付けてしまうことがあります。一見すると些細な記述ミスに思えますが、このセミコロンの有無によってプログラムの動作は大きく変わります。本記事では、その仕組みをわかりやすく解説します。セミコロン付きのwhile・if文の動作たとえば、次のようなコードを考えてみましょう。while (expression);この場合、条件式が真であれば、ループ本体として「空の文(何もしない文)」が実行され続けるため、無限ループに陥ります。一方、条件式が偽であれば、ループ本体は一度も実行されません。同様に、次のようなif文ではどうなるのでしょうか
-
Javaの制御フロー構文を徹底解説:if、else、switchの使い方と実例コード
Javaには、プログラムの流れ(制御フロー)を操作するための方法がいくつか用意されています。制御フロー文は、条件分岐の仕組みを実装することで、プログラムの実行の流れを変更したり中断したりします。 Javaにおける条件分岐のための主な構文は以下の3つです。 if 文 if...else 文 switch 文 この記事では、Javaの制御フロー構文について、それぞれの説明と実際のコード例を交えて詳しく解説します。 Javaのif文とは if 文の基本構文は次のとおりです。 if(condition) { // 条件がtrueの場合にのみ、このコードが実行される } if