이번 글에서는 C 또는 C++ 코드에서 if 블록과 else 블록을 동시에(연이어) 실행하는 방법을 알아보겠습니다. 다소 기발한 트릭을 활용한 방식입니다.
일반적으로 if와 else는 조건에 따라 둘 중 하나만 실행됩니다. 하지만 이 두 블록을 마치 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 .... .... ....
코드 동작 원리
위 프로그램은 무한 루프처럼 동작하며, 그 과정에서 if 블록과 else 블록이 번갈아가며 계속 실행됩니다. 핵심은 각 블록 안에 레이블(label)을 배치하고 goto 문으로 제어 흐름을 강제로 이동시키는 것입니다.
동작 순서를 정리하면 다음과 같습니다.
x > 5조건이 참이므로 if 블록이 먼저 실행됩니다.- if 블록 내부의 메시지를 출력한 후,
goto lebel_2;가 실행되어 제어가 else 블록 내부의lebel_2지점으로 점프합니다. - else 블록의 메시지를 출력한 뒤, 다시
goto lebel_1;이 실행되어 if 블록의lebel_1지점으로 돌아갑니다. - 이 과정이 무한히 반복되며, 첫 번째 조건 검사 이후에는 조건 평가가 더 이상 수행되지 않습니다.
주의 사항
여기서는 goto 문을 사용해 제어 흐름을 if 블록에서 else 블록으로, 다시 else 블록에서 if 블록으로 강제로 이동시켰습니다. 하지만 실무에서는 goto 문의 사용은 권장하지 않습니다.
그 이유는 다음과 같습니다.
- 프로그램의 제어 흐름을 추적하기 어려워져 가독성이 크게 저하됩니다.
- 코드 유지보수 시 버그를 찾기 힘들어집니다.
- 구조화된 프로그래밍 원칙에 어긋나는 습관이 될 수 있습니다.
따라서 이 예제는 C/C++의 저수준 제어 흐름이 어떻게 동작하는지를 보여주는 학습용 데모로 이해하고, 실제 프로젝트에서는 함수 호출이나 반복문 같은 구조적인 대안을 사용하는 것이 좋습니다.