您好,为何程序开头定义了“bool IsOdd(int );”求解释?

这是程序,判断是奇数还是偶数。
我想知道为何程序开头要定义“bool IsOdd(int );”,我把这句话去掉,程序就出错了。

#include "stdio.h"
#include "iostream"
using namespace std;

bool IsOdd(int );
bool IsEven(int n){
if (n==0){
return true;
}
else{
return IsOdd(n-1);
}
}

bool IsOdd(int n){
return !IsEven(n);
}

int main()
{
cout << IsOdd(9);
}

慕运维8079593
浏览 268回答 2
2回答

catspeake

开头的bool IsOdd(int );是函数的声明,也就是告诉编译器说有个函数叫IsOdd,其参数是int,返回值是bool。这样编译器如果在该函数的定义之前看到类如IsOdd(n-1)的语句时就知道这是一个函数调用,等编译了IsOdd函数的定义后再将其函数地址补回到调用处。如果去掉则编译器在第一次碰到IsOdd(n-1)时就不知道这是什么鬼,所以就报错了。不想额外加这一行的办法是把bool IsOdd(int)的实现---也就是定义了,放到调用函数之前,在你的代码中就是把main前面的IsOdd整体挪到前面------------囧了个囧, 您这是互相调用啊? 那没辙了,只能这么写了。 非互相调用的,比如a调用b,但b不调用a的话,可以先定义b,然后定义a,则无需在a前面再增加函数声明; 但如果先定义a则需要在a前面增加b的函数声明。

蓝山帝景

这是函数的声明,告诉编译器这是个函数,定义在其他地方。因此在IsEven函数体里可以调用IsOdd函数。如果不写的话,编译器不知道IsOdd是什么,因为IsOdd写在IsEven后面,编译器还没有对IsOdd进行编译。
打开App,查看更多内容
随时随地看视频慕课网APP