C/C++에서 main 함수의 반환 타입 오류 해결: '::main'은 int를 반환해야 합니다

VSCode에서 C 또는 C++ 프로그램을 실행할 때 다음과 같은 오류가 발생할 수 있습니다:

error: '::main' must return 'int' void main()

이 문제는 주로 void main() 형태로 main 함수를 선언했을 때 발생하며, 특히 C++ 환경이나 최신 컴파일러를 사용하는 경우 자주 나타납니다. 아래 코드 예제를 살펴보겠습니다.

#include <stdio.h>

void main()
{
    int a, *p, b, c, d, e;
    a = 100;
    p = &a;
    b = *&a;

    printf("a=%d\n", a);
    printf("p=%d\n", p);
    printf("*p=%d\n", *p);
    printf("*&a=%d\n", b);

    c = (*p)++;
    printf("(*p)++=%d\n", c);
    printf("a=%d\n", a);
}

오류 원인 분석

C 언어의 초기 표준(C89)에서는 main() 함수의 반환 형식으로 void도 허용되었습니다. 하지만 C99 및 이후 표준(C11, C17), 그리고 모든 C++ 표준에서는 main 함수의 반환 타입이 반드시 int여야만 합니다.

또한, VSCode는 일반적으로 g++ 또는 gcc 기반의 컴파일러와 함께 작동하며, 이들은 엄격한 표준 준수를 요구합니다. 따라서 void main()은 비표준이며 컴파일 에러를 유발합니다.

해결 방법

다음과 같이 main 함수의 시그니처를 수정해야 합니다:

int main(void)
{
    // 변수 선언 및 로직
    int value = 100;
    int* ptr = &value;
    int deref = *&value;

    printf("value = %d\n", value);
    printf("ptr = %p\n", (void*)ptr);
    printf("*ptr = %d\n", *ptr);
    printf("*&value = %d\n", deref);

    int postIncrement = (*ptr)++;
    printf("(*ptr)++ = %d\n", postIncrement);
    printf("updated value = %d\n", value);

    return 0; // 프로그램 정상 종료를 의미
}

또는 명령행 인수를 처리할 필요가 있다면 다음 형태를 사용할 수 있습니다:

int main(int argc, char* argv[])

int main() 인가?

운영체제는 프로그램의 종료 상태를 통해 실행 결과를 판단합니다. main 함수가 int를 반환함으로써:

  • return 0;: 정상 종료
  • return 1; 또는 다른 양수: 오류 또는 비정상 종료

와 같이 상태 값을 전달할 수 있습니다. 이는 스크립트나 다른 프로그램에서 해당 실행 파일의 성공 여부를 체크하는 데 활용됩니다.

C99 이후 표준에서는 main 함수 내에 return 문이 명시되지 않아도 암시적으로 return 0;이 삽입되지만, 가독성과 명확성을 위해 항상 return 0;을 포함시키는 것이 바람직한 코딩 관행입니다.

태그: C C++ vscode main 함수 반환 타입

7월 20일 05:39에 게시됨