Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Fungsi Rekursif Boleh Dicapai dengan Makro C/C?

Bagaimanakah Fungsi Rekursif Boleh Dicapai dengan Makro C/C?

Barbara Streisand
Lepaskan: 2024-12-08 08:32:10
asal
200 orang telah melayarinya

How Can Recursive Functionality Be Achieved with C/C   Macros?

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))
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan