Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 main 함수를 비워두고 "Hello World" 출력하는 방법

개요

이번 문제는 콘솔에 "Hello World"를 출력하되, main 함수 내부에는 아무 코드도 작성할 수 없다는 조건을 만족해야 합니다.

언뜻 보면 불가능해 보이지만, C++의 전역 변수 초기화와 객체 생성 시점의 특성을 활용하면 두 가지 방법으로 해결할 수 있습니다.


방법 1: 전역 변수와 printf() 활용

첫 번째 방법은 전역 변수를 선언하고, 그 변수에 printf() 함수의 반환값을 저장하는 것입니다. 전역 변수의 초기화는 main 함수가 실행되기 전에 이루어지므로, 초기화 과정에서 printf()가 호출되면서 자연스럽게 문자열이 화면에 출력됩니다.

예제 코드

#include<iostream>
using namespace std;
int a = printf("Hello World");
int main() {
}

실행 결과

Hello World

printf()는 성공적으로 출력한 문자 수를 반환하기 때문에, 전역 변수 a에는 11이라는 값이 저장되지만 출력 자체는 초기화 식이 평가되는 순간 이미 완료됩니다.

방법 2: 클래스 생성자 활용

두 번째 방법은 클래스를 정의하고, 그 생성자 안에서 문자열을 출력하도록 작성하는 것입니다. 그런 다음 해당 클래스의 객체를 전역 영역에 생성하면 됩니다.

C++에서 전역 객체는 main 함수가 시작되기 전에 생성되며, 객체가 생성될 때 생성자가 자동으로 호출됩니다. 따라서 프로그램이 시작되자마자 생성자에 작성한 출력문이 실행됩니다.

예제 코드

#include<iostream>
using namespace std;
class my_class {
   public:
   my_class() {
      cout << "Hello World";
   }
};
my_class my_obj;
int main() {
}

실행 결과

Hello World

정리

두 방법 모두 핵심 원리는 같습니다. 바로 전역 변수의 초기화와 전역 객체의 생성은 main 함수보다 먼저 실행된다는 C++의 초기화 순서를 이용하는 것입니다. 이러한 특성을 이해하면 main 함수가 비어 있어도 프로그램 시작 시점에 원하는 작업을 수행할 수 있습니다.