意外#else

时间:2016-07-22 08:46:56

标签: c++ c-preprocessor precompiled-headers

由于某些原因我无法解释,编译器输出的错误表明它发现了一个意外的#else令牌。

这发生在文件的开头:

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

之前没有任何代码可以期待几个(单行)评论。

.cpp文件中出现此错误。您在上面看到的是文件的开头。之前没有任何事情。

我尝试在上面定义的代码之前添加以下代码,错误现在是意外的#endif

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

所以我怀疑包含stdafx.h文件的问题包含以下代码:

#ifndef STDAFX_H_INCLUDED
#define STDAFX_H_INCLUDED

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

using namespace ATL;

#endif // STDAFX_H_INCLUDED

这没什么特别的。我还从stdafx.cpp文件中包含这个stdafx.h文件,该文件只包含#include语句,并且编译正确。

以下是项目预处理器定义:

_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

还有一些额外的信息: 使用Visual Studio 2008编译Windows CE 6。

这会导致什么?谢谢。

1 个答案:

答案 0 :(得分:10)

根据名称stdafx,我认为它是预编译的标题。

预编译器头必须是文件中的第一个include(预处理器)指令,你不能在它之前放置任何东西(甚至不是ifdef)。唯一的例外是一些注释行,因为无论如何都会忽略它们。

根据您的示例,您应该将#ifdef _USING_MFC放入stdafx.h,并在其中加入Afx.h