Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Fungsi Rekursif Boleh Dicapai dengan Makro C/C?
Makro Rekursif dalam C/C
Makro C/C tidak secara langsung menyokong rekursi. Walau bagaimanapun, terdapat cara untuk mencapai kefungsian rekursif menggunakan helah prapemproses.
Pendekatan Menggunakan Ungkapan Tertunda:
Pendekatan ini menggunakan ungkapan tertunda untuk mengelakkan makro daripada dicat biru, sekali gus membolehkannya dikembangkan secara rekursif.
#define EMPTY(...) #define DEFER(...) __VA_ARGS__ EMPTY() #define OBSTRUCT(...) __VA_ARGS__ DEFER(EMPTY)() #define EXPAND(...) __VA_ARGS__ #define pr_id() pr #define pr(n) ((n==1)? 1 : DEFER(pr_id)()(n-1))
Sementara pendekatan ini membenarkan pengulangan, ia memerlukan berbilang pengembangan untuk melengkapkan rekursi.
Contoh: Makro Ulangan Rekursif:
Berikut ialah contoh makro ulangan rekursif:
#define REPEAT(count, macro, ...) \ WHEN(count) \ ( \ OBSTRUCT(REPEAT_INDIRECT) () \ ( \ DEC(count), macro, __VA_ARGS__ \ ) \ OBSTRUCT(macro) \ ( \ DEC(count), __VA_ARGS__ \ ) \ ) #define REPEAT_INDIRECT() REPEAT
Contoh Penggunaan:
// An example of using the recursive repeat macro #define M(i, _) i EVAL(REPEAT(8, M, ~)) // 0 1 2 3 4 5 6 7
Kesimpulan:
Walaupun makro C/C tidak secara langsung menyokong rekursi, adalah mungkin untuk mencapainya melalui helah prapemproses seperti tertunda ungkapan dan makro tersuai. Kaedah ini boleh berguna dalam kes khusus di mana fungsi rekursif diperlukan dalam definisi makro.
Atas ialah kandungan terperinci Bagaimanakah Fungsi Rekursif Boleh Dicapai dengan Makro C/C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!