以下代码:

#define MYDEF(x)
#define MYDEF(y)
int main() {}

给我一个error(或者警告如果pedantic-errors被禁用):
“MYDEF”宏重新定义
原因是未使用参数的名称不同(更重要的是,宏中没有正文)。但为什么呢?在什么情况下会有问题?

最佳答案

因为宏不是函数。它们是由预处理器完成的文本替换,不能重载。
它(几乎)类似于在编辑器中查找和替换。查找MYDEF的所有出现并将其替换为(在您的示例中为空字符串)。当然,事情更复杂,但想法是一样的。
你不能超载找人替换,对吗?:)

10-04 12:50