Mengapa mendefinisikan makro untuk suatu fungsi dengan nama yang sama?


Jawaban:


15

Terkadang beberapa arsitektur di kernel Linux tidak menyediakan fungsi tertentu, seperti arch_atomic_sub_and_test. Ini memungkinkan fungsi-fungsi ini disediakan secara kondisional tanpa melanggar arsitektur lain.

The #definememungkinkan Anda untuk menguji keberadaan fungsi dengan #ifdef:

#ifdef arch_atomic_sub_and_test
// use arch_atomic_sub_and_test
#else
// some other equivalent code
#endif

atau dapat digunakan untuk kesalahan jika fungsi tidak tersedia:

#ifndef arch_atomic_sub_and_test
# error "arch_atomic_sub_and_test not available"
#endif

Sebagai contoh, ini adalah bagaimana ini digunakan di kernel Linux (dari include/asm-generic/atomic-instrumented.h):

#if defined(arch_atomic_sub_and_test)
static inline bool
atomic_sub_and_test(int i, atomic_t *v)
{
        kasan_check_write(v, sizeof(*v));
        return arch_atomic_sub_and_test(i, v);
}
#define atomic_sub_and_test atomic_sub_and_test
#endif
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.