Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VisualStudio预处理器仅在设置了/P时工作_C++_Visual Studio_Visual Studio 2008_C Preprocessor - Fatal编程技术网

C++ VisualStudio预处理器仅在设置了/P时工作

C++ VisualStudio预处理器仅在设置了/P时工作,c++,visual-studio,visual-studio-2008,c-preprocessor,C++,Visual Studio,Visual Studio 2008,C Preprocessor,我在Visual Studio 2008中遇到了一个棘手的问题。我试图使用一个配置头(称为param_defines.h)文件定义一个字符串到枚举的映射,该文件如下所示: DEFINE_ITEM( A, BOOLEAN ) DEFINE_ITEM( B, INT ) DEFINE_ITEM( C, INT ) params["foo"] = foo params["bar"] = bar // ... 等等。然后在第二个头文件(enums.h)中引用该文件: 然后在第三个(源)文件中,我将执

我在Visual Studio 2008中遇到了一个棘手的问题。我试图使用一个配置头(称为param_defines.h)文件定义一个字符串到枚举的映射,该文件如下所示:

DEFINE_ITEM( A, BOOLEAN )
DEFINE_ITEM( B, INT )
DEFINE_ITEM( C, INT )
params["foo"] = foo
params["bar"] = bar
// ...
等等。然后在第二个头文件(enums.h)中引用该文件:

然后在第三个(源)文件中,我将执行以下操作:

#include "enums.h"
std::tr1::unordered_map<std::string, int> params;
#define DEFINE_ITEM( NAME, TYPE ) params[ #NAME ] = NAME
#include "param_defines.h"
#undef DEFINE_ITEM
因此,预处理器出现了一些问题,它并没有达到我想要的效果


关键是这个。我设置了/P,所以我有一些方法来诊断出哪里出了问题。当我这样做时,文件编译成功。

不,它根本不编译
/P
禁止编译(文件只经过预处理,此时没有语法检查),就像
/c
禁止链接一样

由于您没有向我们展示输出的实际外观,我将猜测:您在
#define define_ITEM(NAME,TYPE)params[#NAME]=NAME
的末尾缺少分号,这导致生成的代码如下所示:

DEFINE_ITEM( A, BOOLEAN )
DEFINE_ITEM( B, INT )
DEFINE_ITEM( C, INT )
params["foo"] = foo
params["bar"] = bar
// ...

添加分号,如果没有帮助,请用更多细节编辑问题。

谢谢。我没有意识到它也抑制了编译。