이 글에서는 C 또는 C++ 코드에서 if 블록과 else 블록을 동시에 실행하는 특별한 기법을 소개합니다. 일반적으로 if-else 문은 조건에 따라 둘 중 하나만 실행되지만, 약간의 트릭을 사용하면 두 블록을 마치 if-else 문이 없는 것처럼 순차적으로 실행할 수 있습니다.
예제 코드
핵심 아이디어는 goto 문과 레이블(label)을 활용하는 것입니다. 각 블록 안에 레이블을 배치하고, 서로의 레이블로 제어를 강제로 이동시키는 방식입니다.
#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 블록이 번갈아가며 계속 실행됩니다. 그 과정을 단계별로 살펴보면 다음과 같습니다.
1. 처음에 x = 10이므로 조건 x > 5가 참이 되어 if 블록으로 진입합니다.
2. if 블록 내부의 lebel_1에서 메시지를 출력한 뒤, goto lebel_2;가 실행되어 else 블록 내부의 lebel_2로 제어가 이동합니다.
3. else 블록에서 메시지를 출력한 후 다시 goto lebel_1;이 실행되어 if 블록으로 돌아갑니다.
4. 이 과정이 무한히 반복됩니다.
즉, 첫 조건 검사 이후에는 조건 판단 자체가 더 이상 수행되지 않으므로, 조건식이 출력 결과에 실질적인 영향을 주지 않습니다.
주의 사항
여기서는 goto 문을 사용해 제어 흐름을 if 블록에서 else로, else에서 if로 강제로 이동시켰습니다. 하지만 실무에서는 goto 문의 사용을 권장하지 않습니다. goto를 남용하면 프로그램의 제어 흐름을 추적하기 어려워지고, 코드의 가독성과 유지보수성이 크게 떨어집니다. 이 예제는 C/C++에서 레이블과 goto가 작동하는 방식을 보여주는 학습용 트릭으로 이해하는 것이 좋습니다.