【发布时间】:2011-04-24 17:41:35
【问题描述】:
我想通过不单独创建枚举列表来简化事情,而是沿着函数调用创建枚举,该函数调用创建我指向这些枚举的数据。
我尝试制作#define,它会创建另一个#define,但它不起作用:
int defcounter = 0;
#define make_def(enumname, somedata) \
#define enumname defcounter \
defcounter++; \
func_call(somedata); \
void createstuff(){
make_def(MY_ENUM_NAME, mydata);
make_def(MY_OTHER_ENUMNAME, mydata);
}
void dostuff(){
somefunc_call(MY_ENUM_NAME);
somefunc_call(MY_OTHER_ENUMNAME);
}
但这会在#define enumname 处产生错误:
error C2162: expected macro formal parameter
我怎样才能做到这一点?
【问题讨论】:
-
您应该在
#define enumname defcounter周围添加#ifdefs。你#define了两次。 -
@muntoo,我到底在哪里定义了两次?另外,如果我碰巧尝试定义一些东西两次,我认为它会产生编译错误是最好的。
-
@Rookie 你没有定义任何东西两次,但是宏 make_def 中的第二个 #define 尝试扩展标记“define”并引用它,但它不能,因为它没有定义,它导致我猜的错误
-
@Rookie:关于您要求编译器在#define'd 两次时生成错误(甚至是警告),这不是 C 预处理器的工作方式,而且也是几十年迟到了。
-
问题是,我不明白你为什么要在运行时创建枚举值。如果你想在你的 somefunc_call 中对它们采取行动,你必须事先知道它们的值,因此你必须在编译时拥有它们。在这种情况下,为什么不创建一个普通的枚举呢?在另一种情况下......好吧,枚举只是一个整数类型,那么为什么不简单地使用一个 int (例如)?
标签: c++ visual-studio-2008 macros enums