编译器无法跳转到找到被调用函数的定义?

0 c++ function forward-declaration function-prototypes

在C++中,执行从main()的顶部开始.好的,我知道了.现在看看这个:

  #include <iostream>
   int main ()
   {
       int x;
       std::cin >> x;
       std::cout << add (x, x);
       return 0;
   }

   int add(int x, int y)
   {
         return x+y;
   }
Run Code Online (Sandbox Code Playgroud)

编译器在执行此程序时抛出错误.如果我将add()移到main()上面或使用前向声明,程序将被编译而没有任何错误.这是否意味着编译器不能从调用函数跳转到查找调用者下面定义的被调用函数的定义.请原谅我的英语.

das*_*ght 6

当然编译器可以提前扫描并找到函数定义.然而,C(以及扩展,C++)的标准有很长的历史,可以追溯到由于对磁盘上的文件访问速度慢而对编译的代码进行第二次传递的时间非常昂贵.记忆的相对不足也是一个因素.

这种考虑肯定有助于在C中要求前向声明,而C++继承了它.改变这一要求会对语言带来非常大的变化,使得向新编译器反向移植新程序变得更加困难.这并不意味着它不能在以后的某个时间完成,但目前还没有完成.