为什么要为具有相同名称的函数定义宏?


Answers:


15

有时,Linux内核中的某些架构不提供某些功能,例如arch_atomic_sub_and_test。这允许有条件地提供这些功能,而不会破坏其他体系结构。

#define让您测试与功能的存在#ifdef

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

或如果该功能不可用,则可用于出错:

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

例如,这是在Linux内核中的用法(来自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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.