我的问题是:如果您有一个与函数同名的宏和函数,那么只会调用宏,对吗?如果我想调用函数而不是宏怎么办?
如果你有一个函数和一个宏,它们都被命名为 foo
,并且你想调用函数版本,你可以这样做:
(foo)(args)
这是因为函数式宏名称必须后跟括号参数列表才能进行替换。 ISO C99标准第7.1.4 / 1节中提到了这一点:foo
和&foo
不会导致类似函数的宏调用。但这是对象宏的正确解决方案。 - Potatoswatter#ifdef foo
#undef foo
#endif //
因此,在调用函数的单个文件中,您始终会有明确的行为。