2016-07-22 4 views
3

설명 할 수없는 이유로 컴파일러에서 예기치 않은 #else 토큰을 발견했다는 오류가 출력됩니다.예기치 않은 #else

이 파일의 시작 부분에 발생

#if defined(_USING_MFC) 
    #include "stdafx.h" 
#else 
    #include <windows.h> 
#endif 

몇 가지 (한 줄) 주석을 기대 코드의의 peice 전에 아무것도 없다.

이 오류는 .cpp 파일에서 발생합니다. 위에 보이는 것은 파일의 시작입니다. 그 전에는 아무것도 없습니다.

제가 위에서 정의 된 코드 전에 다음 코드를 추가했는데, 오류가

#if 1 
    #include "stdafx.h" 
#endif 

그래서 나는이 문제는 다음을 포함 포함 된 STDAFX.H 파일이 의심 #endif // 이는 지금 예기치 않은

코드 :

#ifndef STDAFX_H_INCLUDED 
#define STDAFX_H_INCLUDED 

#include <Afx.h> 
#include <Windows.h> 

using namespace ATL; 

#endif // STDAFX_H_INCLUDED 

정말 특별한 것은 없습니다. #include 문만 포함하는 stdafx.cpp 파일에서이 stdafx.h 파일을 포함하므로 제대로 컴파일됩니다. 이 원인이 될 것입니다 무엇 비주얼 스튜디오 2008

를 사용하여 Windows CE 6 컴파일 :

_DEBUG 
_WIN32_WCE=$(CEVER) 
UNDER_CE 
WINCE 
DEBUG 
_WINDOWS 
$(ARCHFAM) 
$(_ARCHFAM_) 
_UNICODE 
UNICODE 
_TERMINAL_FALCONX3_CE6 
_NO_CPP_EXCEPTIONS 
_DONT_INCLUDE_WS_HEADERS 
_USING_MFC 

그리고 몇 가지 추가 정보 : 여기

프로젝트 처리기 정의입니까? 고맙습니다.

+1

upvoted countervote counter. 사람들은 질문에 너무 쉽게 주위에 downvotes 던져, 제 의견으로는 당신이 완벽하게 합리적입니다. – Smeeheey

+0

비합리적인 것은 아니며 단지 세부 사항이 부족한 것처럼 보입니다. 나는 제공된 정보로 문제를 파악하는 것이 가능하다고 생각하지 않는다. 그러나 나는 틀린 것일 수 있으므로 그 대답을 읽도록하겠습니다. –

답변

9

이름이 stdafx이므로 미리 컴파일 된 헤더라고 가정합니다.

프리 컴파일러 헤더는 파일의 첫 번째 include (preprocessor) 지시문이어야하며, 앞에 (ifdef조차도) 아무것도 넣을 수 없습니다. 어쨌든 무시할 수있는 몇 가지 주석 행만 예외입니다.

예제에 따르면 stdafx.h#ifdef _USING_MFC을 넣고 여기에 Afx.h을 포함해야합니다.

+0

설명 : '#include "stdafx.h"까지는 미리 컴파일 된'stdafx.pch'의 내용으로 대체됩니다. 이것은 또한'# if'을 대체하지만'# else'는 대체하지 않기 때문에, 미리 컴파일되지 않은 첫 번째 라인은 실제로'# else'입니다. 확실히 예상치 못한 일입니다. – MSalters