【问题标题】:C Preprocessor precedenceC 预处理器优先级
【发布时间】: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()。

【问题讨论】:

标签: c c-preprocessor


【解决方案1】:
#define S(x) #x
#define EXPECT(f) func_name(S(f))  

【讨论】:

    猜你喜欢
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 2015-10-21
    相关资源
    最近更新 更多