使用#定义调用函数的round工作方式错误.为什么



使用#define的C和C++文档表明,这不应该起作用,因为我正在使用define将文本MyFunc((替换为_MyFunc((这是一个不存在的函数:

#define MyFunc _myfunc
void MyFunc()
{
cout << "This Prints!" << endl;
}
int Main()
{
_myfunc();
return 0;
}

我的猜测是编译器很聪明。它知道_myfunc((不存在,因此不会替换文本,并简单地使用myfunc((。

我找不到任何文件来支持这一理论。有人知道这是否正确吗?

预处理器运行后,您的程序将看起来像:

void _myfunc()
{
cout << "This Prints!" << endl;
}
int Main()
{
_myfunc();  // #1
return 0;
}

忽略此处的其他错误(缺少includes,…(,编译器可以找到声明和定义的_myfunc,因此自然会在调用站点#1通过重载解析找到它。

最新更新