이 문제에서는 루프(loop), 재귀(recursion), 그리고 그 외 어떠한 제어 구조도 사용하지 않고 문자열 'ABCD'를 반복해서 출력하는 C 프로그램을 작성해야 합니다.
일반적으로 특정 코드 블록을 반복 실행할 때 가장 널리 쓰이는 방법이 바로 루프, 재귀, 제어 구조입니다. 하지만 이번에는 이 세 가지를 모두 배제한 상태에서 동일한 코드 블록을 무한히 실행해야 합니다.
이를 해결하는 핵심 아이디어는 루프를 돌리는 대신 같은 프로그램 자체를 계속해서 다시 실행하는 것입니다. 코드 내부에서 system() 함수를 호출하면 운영체제 명령을 통해 자기 자신을 다시 실행할 수 있으므로, 주어진 제약 조건 안에서도 무한 반복 작업을 수행할 수 있습니다.
구체적인 구현 방법은 간단합니다. system() 함수의 인자로 컴파일된 프로그램 파일 이름을 전달하면, 프로그램이 실행될 때마다 새로운 프로세스가 생성되며 스스로를 끝없이 호출하게 됩니다.
솔루션 구현 예제
// 프로그램 파일명을 main으로 지정
#include<stdio.h>
#include<stdlib.h>
int main(){
printf("ABCD\t");
system("main");
return 0;
}
위 코드를 컴파일할 때는 실행 파일 이름이 system() 함수에 전달한 이름과 일치하도록 해야 합니다. 예를 들어 GCC 환경이라면 다음과 같이 컴파일합니다.
gcc main.c -o main
출력 결과
사용자가 직접 프로그램 실행을 중단하기 전까지 ABCD가 무한히 출력됩니다.
동작 원리 정리
프로그램이 시작되면 먼저 'ABCD'를 화면에 출력한 뒤, system() 함수를 통해 자기 자신(실행 파일)을 새 프로세스로 다시 실행합니다. 새로 실행된 프로세스 역시 같은 동작을 반복하기 때문에, 마치 무한 루프처럼 'ABCD'가 계속해서 출력되는 것입니다. 이처럼 system() 함수를 활용하면 루프, 재귀, 제어 구조 없이도 반복 실행 효과를 얻을 수 있습니다.