Visual Studio预处理器只在/P设置时工作
Visual Studio preprocessor only works if /P is set
我在Visual Studio 2008中遇到了一个尴尬的问题。我试图定义一个字符串到枚举映射使用配置头(称之为param_definitions .h)文件,看起来像这样:
DEFINE_ITEM( A, BOOLEAN )
DEFINE_ITEM( B, INT )
DEFINE_ITEM( C, INT )
以此类推。然后在第二个头文件(enums.h)中引用:
enum ParamType
{
BOOLEAN = 0,
INT
};
enum Param
{
UNKNOWN = -1
#define DEFINE_ITEM( NAME, TYPE ) ,NAME
#include "param_defines.h"
#undef DEFINE_ITEM
};
然后在第三个(源)文件中我这样做:
#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
当我编译源文件时,我发现了如下错误:
error C2065: 'A': undeclared identifier
error C2065: 'B': undeclared identifier
error C2065: 'C': undeclared identifier
所以预处理器没有完全按照我想要的去做。
问题是这样的。我设置/P,这样我就有办法诊断出哪里出了问题。当我这样做时,文件编译成功。
不,它根本无法编译。/P
抑制编译(文件只进行预处理,此时没有语法检查),就像/c
抑制链接一样。
由于您没有向我们展示输出实际是什么样子,我将猜测:您在#define DEFINE_ITEM( NAME, TYPE ) params[ #NAME ] = NAME
末尾缺少分号,这导致生成的代码看起来像这样:
params["foo"] = foo
params["bar"] = bar
// ...
添加分号,如果没有帮助,请编辑更详细的问题
相关文章:
- Poco 库 PUT 方法未按预期工作,尽管主机、方法、内容类型设置正确
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 如何在 curl 代码C++设置授权持有者标头?我得到的授权不足,即使它在命令行上工作
- std::设置扣除指南不像我期望的那样工作
- 在Visual Studio Code(.json配置)中设置相对于工作区路径的c / c ++项目的包含路径
- 为什么我必须将错误状态标志设置为 goodbit 才能使其工作
- Live555MediaServer 在每个新连接时重新启动流。为什么将"reuseSource"设置为 true 无法按预期工作?
- 设置 ACL,指定允许在请求队列上接收 I/O 的工作进程
- 默认区域设置"root"在 ICU 中如何工作?
- 浮点精度设置如何工作
- 为什么计时器工作了这么多次,甚至我设置它的repeat=false
- 如何设置 cmake,以便将 txt 文件作为资源添加到工作目录中
- 这种计算 32 位整数中设置位数的算法如何工作
- 设置键盘状态无法正常工作
- 我已经将虚拟内存设置为20GB,但由于内存不足,代码仍然无法工作
- 在 c++ 中,如何远程设置注册表项(连接工作正常,但设置不起作用!
- 如何确定流程的"经理"和"工作线程"线程的优先级(或为其设置调度策略)?
- 如何为嵌入式python解释器设置工作目录
- 程序在设置中/MT时工作,但在/MD时失败
- OpenCV将FPS设置为相机不工作