C预处理器优先级

4
我有以下问题:
extern void func_name(const char *f);  
#define EXPECT(f) func_name(#f)  
#define foo bar  

void main()  
{  
     EXPECT(foo);  
}  

So, the

EXPECT(foo);

将被实际评估为。
func_name("foo");

我需要的是将“foo”转换为“bar”,即代码变为
func_name("bar");

所以我有点想这样做:

#define "foo" "bar"

但这并不起作用,因为宏名称必须是标识符。我还尝试找到一种改变预处理器优先级的方法,使我的宏首先被替换,但没有找到方法。
完美的解决方案将不会改变main()。

2
我刚遇到了这个。https://dev59.com/qoLba4cB1Zd3GeqPfofL - IdeaHat
3
如果你的教科书告诉你 void main() 是正确的,那么它的作者就是在欺骗你。找一本更好的教材。正确的定义应该是 int main(void) - Keith Thompson
可能是C预处理器,将宏的结果转换为字符串的重复问题。 - Alex Celeste
1个回答

4
#define S(x) #x
#define EXPECT(f) func_name(S(f))  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接