Neden aynı ada sahip bir işleve bir makro tanımlamalıyım?


Yanıtlar:


15

Bazen Linux çekirdeğindeki bazı mimariler gibi belirli işlevler sağlamaz arch_atomic_sub_and_test. Bu, bu işlevlerin diğer mimarileri bozmadan şartlı olarak sağlanmasına izin verir.

#defineFonksiyonu ile varlığını testi yapmanızı sağlar #ifdef:

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

veya işlev kullanılamıyorsa hata yapmak için kullanılabilir:

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

Örneğin, Linux çekirdeğinde şu şekilde kullanılır 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.