为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕运维8079593 2021-10-06 20:11:13
这是程序,判断是奇数还是偶数。我想知道为何程序开头要定义“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的函数声明。

查看完整回答
反对 回复 2021-10-10
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

这是函数的声明,告诉编译器这是个函数,定义在其他地方。
因此在IsEven函数体里可以调用IsOdd函数。
如果不写的话,编译器不知道IsOdd是什么,因为IsOdd写在IsEven后面,编译器还没有对IsOdd进行编译。

查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 266 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信