บางครั้งสถาปัตยกรรมบางอย่างใน Linux Kernel 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