类似函数的宏没有正文但参数名称不同

αλε*_*λυτ 0 c c++ macros

以下代码:

#define MYDEF(x)
#define MYDEF(y)
int main() {}
Run Code Online (Sandbox Code Playgroud)

给我一个错误(如果pedantic-errors禁用则发出警告):

"MYDEF"宏重新定义

原因是未使用的参数的名称不同(更多,宏中没有正文).但为什么?在哪些情况下它可能是一个问题?

Ser*_*eyA 7

因为宏不是函数.它们是预处理器完成的文本替换,不能超载.

它(几乎)类似于编辑器中的查找和替换.查找MYDEF的所有出现并将其替换为(在您的情况下为空字符串).当然,它更复杂,但想法是一样的.

并且你不能超载这个发现和替换,可以吗?:)