비주얼 스튜디오(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을 제외하면 된다.
'Programming Language > C,C++' 카테고리의 다른 글
C] fopen, freopen, fdopen를 사용하는 파일 접근 정리 (0) | 2018.06.02 |
---|---|
C, C++] 이중 포인터를 이용해 2차원 배열 사용하기 (2) | 2018.05.16 |
C, C++] 조건부 컴파일 (0) | 2018.05.08 |
C, C++] 매크로 정의, 해제 (0) | 2018.05.06 |
C,C++] Visual Studio와 컴파일러 (0) | 2018.02.18 |