为什么即使没有任何类声明也需要原型?

Ito*_*Ito 4 c++ function-prototypes

如果我这样做: Ex1:

#include <iostream>

int main()
{
    //try to call doSomething function
    doSomething();
}

void doSomething()
{
    std::cout << "Call me now!" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我收到编译错误!因为编译不知道什么是"doSomething".

但是如果我将doSomething的位置改为第一位,程序就会成功编译. EX2:

#include <iostream>

void doSomething()
{
    std::cout << "Call me now!" << std::endl;
}

int main()
{
    //try to call doSomething function
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

我可以声明原型是这样的: Ex3:

#include <iostream>

void doSomething(void);

int main()
{
    //try to call doSomething function
    doSomething();
}

void doSomething()
{
    std::cout << "Call me now!" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但为什么第一个例子不起作用?为什么我甚至必须首先声明原型或调用函数和函数?

谢谢!

Ern*_*ill 6

如果编译器没有看到定义或声明,就不能调用函数,首先 - 简单.在调用之前必须出现原型或实际定义.

  • 哦,你的意思是Java可以调用一个方法,该方法的定义稍后出现在同一个文件中.是的,那是因为Java编译器可以对源文件进行多次传递,而C++按照定义在一次传递中进行.在这两种情况下,编译器必须先知道这些方法才能调用它们 - 但在Java中,它在进行实际代码生成之前会做一些更高级的工作. (2认同)