慕運維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的函數聲明。

藍山帝景
TA貢獻1843條經驗 獲得超7個贊
這是函數的聲明,告訴編譯器這是個函數,定義在其他地方。
因此在IsEven函數體里可以調用IsOdd函數。
如果不寫的話,編譯器不知道IsOdd是什么,因為IsOdd寫在IsEven后面,編譯器還沒有對IsOdd進行編譯。
添加回答
舉報
0/150
提交
取消