Bolehkah Makro Rekursif Wujud?
Sementara makro kekurangan keupayaan rekursif yang wujud dalam C/C , terdapat jalan untuk mencapainya tingkah laku seperti rekursif. Menggunakan gabungan ungkapan tertunda dan tidak arah, seseorang boleh mencipta makro terperinci yang mensimulasikan rekursi.
Cara Ia Berfungsi
Untuk mencipta makro rekursif, kita mesti menerima pelbagai -proses langkah:
Contoh: Makro Ulangan Rekursif
Berikut ialah ilustrasi makro ulangan rekursif:
#define REPEAT(count, macro, ...) \ WHEN(count) \ ( \ OBSTRUCT(REPEAT_INDIRECT) () \ ( \ DEC(count), macro, __VA_ARGS__ \ ) \ OBSTRUCT(macro) \ ( \ DEC(count), __VA_ARGS__ \ ) \ )
Makro ini boleh dipanggil seperti ini:
EVAL(REPEAT(8, M, ~)) // Outputs: 0 1 2 3 4 5 6 7
Sampel Pelaksanaan Isu
Kod yang anda berikan:
# define pr(n) ((n==1)? 1 : pr(n-1)) void main () { int a=5; cout<<"result: "<< pr(5) <<endl; getch(); }
tidak dilaksanakan kerana isu makro rekursif. Makro pr bergantung semata-mata pada rekursi, yang membawa kepada pengembangan tanpa had.
Penyelesaian
Untuk menyelesaikan isu ini, anda boleh menggunakan versi makro bukan rekursif berikut:
#define fact(n) ((n == 1)? 1 : n * fact(n - 1))
Atas ialah kandungan terperinci Bolehkah Makro Rekursif Dilaksanakan dalam C/C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!