繁体   English   中英

为什么以下程序编译?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM