我有以下问题:
将被实际评估为。
我需要的是将“foo”转换为“bar”,即代码变为
但这并不起作用,因为宏名称必须是标识符。我还尝试找到一种改变预处理器优先级的方法,使我的宏首先被替换,但没有找到方法。
完美的解决方案将不会改变main()。
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()。
void main()
是正确的,那么它的作者就是在欺骗你。找一本更好的教材。正确的定义应该是int main(void)
。 - Keith Thompson