以下代码:
#define MYDEF(x)
#define MYDEF(y)
int main() {}
给我一个error(或者警告如果
pedantic-errors
被禁用):“MYDEF”宏重新定义
原因是未使用参数的名称不同(更重要的是,宏中没有正文)。但为什么呢?在什么情况下会有问题?
最佳答案
因为宏不是函数。它们是由预处理器完成的文本替换,不能重载。
它(几乎)类似于在编辑器中查找和替换。查找MYDEF的所有出现并将其替换为(在您的示例中为空字符串)。当然,事情更复杂,但想法是一样的。
你不能超载找人替换,对吗?:)