这是程序,判断是奇数还是偶数。我想知道为何程序开头要定义“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);}
2 回答
catspeake
TA贡献1111条经验 获得超0个赞
开头的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的函数声明。
蓝山帝景
TA贡献1843条经验 获得超7个赞
这是函数的声明,告诉编译器这是个函数,定义在其他地方。
因此在IsEven函数体里可以调用IsOdd函数。
如果不写的话,编译器不知道IsOdd是什么,因为IsOdd写在IsEven后面,编译器还没有对IsOdd进行编译。
添加回答
举报
0/150
提交
取消