【发布时间】:2021-06-04 11:06:25
【问题描述】:
使用 #define 的 C 和 C++ 文档表明这不应该起作用,因为我使用定义将文本 MyFunc() 替换为 _myfunc() ,这是一个不存在的函数:
#define MyFunc _myfunc
void MyFunc()
{
cout << "This Prints!" << endl;
}
int Main()
{
_myfunc();
return 0;
}
我的猜测是编译器很聪明。它知道 _myfunc() 不存在,因此不替换文本,简单地使用 MyFunc()。
我找不到任何文档来支持这一理论。有谁知道这是否正确?
【问题讨论】:
-
#define是一个预处理器宏。预处理器在编译器之前运行,因此 - 编译器甚至看不到任何#defines,所以它不能聪明(或不聪明)这些。 -
您的猜测不正确。
void MyFunc()被void _myfunc()取代,因为这就是#define的工作方式,当main被编译时不会发生任何令人兴奋的事情。
标签: c++ c++11 c-preprocessor compiler-optimization cl