C 预处理器优先级

标签 c c-preprocessor

我有以下问题:

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() 。

最佳答案

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

关于C 预处理器优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25414184/

相关文章:

c - 如何让 C 程序用作 Windows 申请表?

c - 我的 C 代码中出现未知的 "delete"错误

c - 如何知道线程是否处于死锁状态?

c - 在 C 预处理器宏中是否有相当于 Haskell 的 `let`/`in`?

c - 段错误-为什么会出现此错误?

c - 常用的 gvim 快捷键有哪些?

c++ - Flex C++ - #ifdef inside flex block

c - 该宏在什么情况下会导致错误?

c++ - VC++ 替换不同对象的定义,GCC 等不

c - 可变函数问题