先定义后使用
约 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 放最前面时,声明就特别有用。
小坑:声明和定义的返回类型、参数类型必须完全一致,对不上会报错或链接失败。
小纸条
为什么调用一个还没定义的函数会报错?
登录 后可看答案