为什么以下程序编译?

Aba*_*cus 2 c++

#include<iostream>

using namespace std;

int main()
{
    int abc();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当编译器到达该行时int abc();,它正确地认为我们正在声明一个名为的函数abc,该函数不接受任何参数且其返回类型的类型为int.那么为什么编译器没有给我一个错误,因为我还没有定义一个名为的函数abc

vll*_*vll 11

在没有定义函数的情况下声明函数不是错误.该函数可能已在另一个文件中定义.在C++中,每个编译单元(C++文件)都是单独编译的,之后链接在一起.

链接器也不显示错误,因为您不尝试使用该功能.如果您尝试使用它,链接器将搜索所有编译单元以获取定义,并在找不到定义时显示错误.