Programming Language/C,C++

C, C++] stdafx.h와 C2065(선언되지 않은 식별자입니다.)

TwinParadox 2018. 5. 15. 10:20
728x90

비주얼 스튜디오(Visual Studio)로 코딩을 입문한 사람들이 자주 마주하는 오류 중 하나가 바로 "stdafx.h", 프리 컴파일 문제일 것이다. 입문자들 입장에선 프리컴파일이나, "stdafx.h" 같은 것이 뭔지 전혀 모르는 상황에서 이것이 무엇이라고 설명하는 건 크게 의미가 없을 것 같고, 이 게시물에서는 저 오류를 만났을 때 해결하는 방법을 이야기해볼까 한다. 


이 문제는 특히 stdio.h(printf, scanf)가 아니라 iostream(cin, cout)을 사용할 때 주로 발생하는 문제인데, 이는 기본적으로 stdafx.h에 stdio.h가 미리 컴파일할 헤더 파일로 포함되어 있기 때문이다.



stdafx.h

// stdafx.h : 자주 사용하지만 자주 변경되지는 않는
// 표준 시스템 포함 파일 또는 프로젝트 관련 포함 파일이
// 들어 있는 포함 파일입니다.
//

#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>



// TODO: 프로그램에 필요한 추가 헤더는 여기에서 참조합니다.



main.cpp

#include <iostream>
#include "stdafx.h"
using namespace std;
int main()
{
	cout << "Hello World!";
    return 0;
}



위 같은 상황이면 컴파일 에러가 난다. 필자는 이런 상황에서 입문자에게 크게 두 가지 해결 방법을 제시한다.



1. Win32 Console Application을 빈 프로젝트로 생성해라.

최근까지는 입문자에게 무조건 이 방법을 따를 것을 권했다. Visual Studio 2015까지는 Win32 콘솔 응용프로그램(Win32 Console Application)을 새 프로젝트를 만들 때, 빈 프로젝트 옵션을 체크할 수 있었는데 Visual Studio 2017부터는 기존의 방법과는 조금 다르게 생성해야 해서 설명하는 것이 번거로워졌다. 하지만, 빈 프로젝트 생성이 어려워진 건 아니고 생성 방법이 달라졌을 뿐이다. 이와 관련된 내용은 아래 게시물을 참조해라.


http://twinparadox.tistory.com/237



2. #include "stdafx.h"를 맨 첫 줄에 위치시켜라.

이번 게시물을 쓴 이유는 바로 이것을 이야기하기 위해서다. 빈 프로젝트 생성에만 익숙해진 사람들은 잘 모르는 해결 방법이다. Visual Studio로 코딩 좀 해봤다는 사람들도 모르는 경우가 많다. stdafx.h와 stdafx.cpp는 미리 컴파일할 것들에 대해서 처리하는 부분이다. 말 그대로, 컴파일할 시점에 이것부터 처리하고 시작하기 때문에 다른 헤더파일보다 우선 순위에 존재한다. 해결 방법은 간단하다. 작성한 소스 코드의 가장 첫 줄에 #include "stdafx.h"를 위치시키면 된다.



main.cpp

#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
	cout << "Hello World!";
    return 0;
}


이외에도 미리 컴파일하는 것을 해제하는 방법 같은 것들이 있는데, 입문자에게 IDE 설정을 건드리라고 하는 게 더 어려운 내용일 것 같아서 제외했다.


기본적으로 책을 따라가면서 코드를 작성할 때는 빈 프로젝트를 만드는 게 귀찮을 수도 있으니 두 번째 방법을 선택하면 방법으로 작성하고, 학부 수준에서 기초적인 C/C++ 과제를 제출할 때는 stdafx.h와 stdafx.cpp을 제외하면 된다.

728x90
728x90