【发布时间】:2014-08-20 20:51:38
【问题描述】:
我有以下问题:
extern void func_name(const char *f);
#define EXPECT(f) func_name(#f)
#define foo bar
void main()
{
EXPECT(foo);
}
所以,
EXPECT(foo);
将被实际评估为
func_name("foo");
我真正需要的是将'foo'转换为'bar',即变成的代码
func_name("bar");
所以我有点想这样做:
#define "foo" "bar"
但这不起作用,因为宏名称必须是标识符。我也试过想办法改变预处理器的优先级,所以我的宏会先被替换,但是没有找到办法。
完美的解决方案根本不会改变 main()。
【问题讨论】:
-
如果您的教科书告诉您
void main()是正确的,那么它的作者对您撒了谎。买一本更好的书。正确的定义是int main(void)。
标签: c c-preprocessor