#include<iostream>
using namespace std;
int main()
{
int abc();
return 0;
}
当编译器到达行int abc();
时,它正确地认为我们在声明一个名为abc
的函数,该函数不接受任何参数,返回类型为int类型。那么,为什么编译器没有因为我没有定义名为abc
的函数而向我抛出错误?
答案 0 :(得分:11)
不定义函数就声明它不是错误。该功能可能已在另一个文件中定义。在C ++中,每个编译单元(C ++文件)都单独编译,然后再链接在一起。
链接器也不显示错误,因为您没有尝试使用该功能。如果您尝试使用它,则链接器将在所有编译单元中搜索该定义,并在找不到定义时显示错误。
答案 1 :(得分:1)
我认为您假设代码行是...
int a = abc();
这将是对该函数的调用。 (请注意,这也可能会“编译”但不会链接。)
无论您写了什么原型,它都不是对函数的调用。
int abc();