在预编译单元中定义宏条件语句是否明智?
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"
******* 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"