我有以下问题:
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/