একই নামে কোনও ফাংশনে ম্যাক্রো সংজ্ঞায়িত করবেন কেন?


12

আমি নীচের কোডটি https://github.com/torvalds/linux/blob/master/arch/x86/incolve/asm/atomic.h এ পেয়েছি

static __always_inline bool arch_atomic_sub_and_test(int i, atomic_t *v)
{
        return GEN_BINARY_RMWcc(LOCK_PREFIX "subl", v->counter, e, "er", i);
}
#define arch_atomic_sub_and_test arch_atomic_sub_and_test

কি #defineসত্যিই কি? কখন এটি করা দরকার?

উত্তর:


15

কখনও কখনও লিনাক্স কার্নেলের কিছু আর্কিটেকচার নির্দিষ্ট ফাংশন সরবরাহ করে না, যেমন 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

উদাহরণস্বরূপ, এটি লিনাক্স কার্নেলে (থেকে 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.