先定义后使用

8 分钟

函数必须先定义或先声明,才能被调用。编译器是从上往下读代码的,读到一个没见过的函数名,就会报“未声明的标识符”。

int main() {
    printStars();    // 错!编译器还没见过 printStars
}
void printStars() { /* ... */ }

有两种修法。一是把定义整个搬到调用之前。二是保留原顺序,只在前面先打个招呼——写一行函数声明(也叫函数原型),告诉编译器“有这么个函数,长这样,实现在后面”:

void printStars();       // 声明:只有头,没有身体,末尾加分号

int main() {
    printStars();        // 现在编译器认识它了
}

void printStars() {      // 定义:真正的实现
    for (int i = 0; i < 20; i++) cout << '*';
    cout << endl;
}

声明只需返回类型、名字和参数类型,参数名可省。多个函数互相调用、或想把 main 放最前面时,声明就特别有用。

小坑:声明和定义的返回类型、参数类型必须完全一致,对不上会报错或链接失败。

小纸条

为什么调用一个还没定义的函数会报错?

登录 后可看答案

先定义后使用 · 考级冲刺 · op599 课程