[英]Why does the following program compile?
#include<iostream>
using namespace std;
int main()
{
int abc();
return 0;
}
当编译器到达int abc();
行时int abc();
,它正确地认为我们声明了一个名为abc
的函数,该函数不接受任何参数,其返回类型的类型为int。 那么为什么编译器没有给我一个错误,因为我还没有定义一个名为abc
的函数?
在没有定义函数的情况下声明函数不是错误。 该函数可能已在另一个文件中定义。 在C ++中,每个编译单元(C ++文件)都是单独编译的,之后链接在一起。
链接器也不显示错误,因为您不尝试使用该功能。 如果您尝试使用它,链接器将搜索所有编译单元以获取定义,并在找不到定义时显示错误。
我想你已经假设代码行是......
int a = abc();
这将是对函数的调用。 (请注意,这也可以“编译”但不会链接。)
但是你已经编写了一个原型,它不是对函数的调用。
int abc();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.