我想知道我們是否可以在C / C ++中使用遞歸宏?如果是,請?zhí)峁┦纠纠?。第二件事:為什么我無法執(zhí)行以下代碼?我在做什么錯?是因為遞歸宏嗎?# define pr(n) ((n==1)? 1 : pr(n-1))void main (){ int a=5; cout<<"result: "<< pr(5) <<endl; getch();}
3 回答

HUWWW
TA貢獻1874條經(jīng)驗 獲得超12個贊
您的編譯器可能提供了僅預處理而不實際編譯的選項。如果您要在宏中查找問題,這將很有用。例如使用g++ -E:
> g++ -E recursiveMacro.c
# 1 "recursiveMacro.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "recursiveMacro.c"
void main ()
{
int a=5;
cout<<"result: "<< ((5==1)? 1 : pr(5 -1)) <<endl;
getch();
}
如您所見,它不是遞歸的。pr(x)在預處理期間僅被替換一次。要記住的重要一點是,預處理器所做的全部工作就是盲目地將一個文本字符串替換為另一個文本字符串,而實際上并沒有計算類似的表達式(x == 1)。
您的代碼無法編譯的原因pr(5 -1)是沒有被預處理器替換,因此它最終作為對未定義函數(shù)的調(diào)用而出現(xiàn)在源代碼中。
- 3 回答
- 0 關注
- 888 瀏覽
添加回答
舉報
0/150
提交
取消