在预编译单元中定义宏条件语句是否明智?

Is it wise to define macro conditional statement within Precompilation unit?

******* stdafx.h ********
#pragma once

#include "targetver.h"
#define WIN32_LEAN_AND_MEAN             
// Windows Header Files:
#include <windows.h>

**************************

******* dummy.cpp ********
    #if defined (_MSC_VER)
    #include "stdafx.h"
    #endif
    /........ content ....../
**************************

当我编译 dummy.cpp 时,使用 Visual C++ 编译器弹出以下编译器错误:

error C2856: #pragma hdrstop cannot be inside an #if block

为了防止出现上述错误,我将 macro conditional 语句移植到 stdafx.h 预编译中,如下所示:

    ******* stdafx.h ********
    #pragma once

    #if defined (_MSC_VER)
     #include "targetver.h"
     #define WIN32_LEAN_AND_MEAN             
     // Windows Header Files:
     #include <windows.h>
    #endif 
    **************************

这是避免上述预编译单元编译错误的好方法吗?

这种方法行不通。在编译过程中忽略预编译头包含之前的所有内容,因此 dummy.cpp 中的 #if defined (_MSC_VER) 将被丢弃。

更好的方法是删除所有 #include "stdafx.h" 并通过编译选项包含预编译头文件 Forced Include File:

/FI"stdafx.h"