Unexpected #else

Unexpected #else

本文关键字:#else Unexpected      更新时间:2023-10-16

由于我无法解释的原因,编译器输出了一个错误,说它发现了一个意外的#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

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

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

_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编译。

是什么原因造成的?非常感谢。

基于名称stdafx,我假设它是一个预编译的头。

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

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