سؤال

#define LINK_ENTITY_TO_CLASS(mapClassName,DLLClassName) \
    static CEntityFactory<DLLClassName> mapClassName( #mapClassName );

هذا ماكرو من تعديل Alien Swarm للعبة Half-Life 2، ومن المفترض أن يتم تجميعه باستخدام MSVC.

لم أرى قط حجة يسبقها أ # في ماكرو من قبل، ولست متأكدًا مما إذا كان هذا أمرًا محددًا لـ MSVC أم أنه غير شائع.ماذا يعني ذلك؟

هل كانت مفيدة؟

المحلول

يعد هذا جزءًا من كل من C وC++ القياسيين وليس خاصًا بالتنفيذ.ال # يقوم عامل المعالجة المسبقة بتقييد حجته.يستغرق الأمر كل الرموز المميزة التي تم تمريرها إلى الماكرو للمعلمة المعينة بواسطة المعامل الخاص بها (في هذه الحالة، المعلمة mapClassName) ويجعل منها سلسلة حرفية.لذلك، على سبيل المثال البسيط،

#define STRINGIZE(x) # x

STRINGIZE(Hello World)
// gets replaced with
"Hello World"

لاحظ أن الرموز المميزة للوسيطة هي لا استبدال الماكرو قبل أن يتم تقييدها، لذلك إذا Hello أو World إذا تم تعريفها على أنها ماكرو، فستظل النتيجة كما هي.أنت بحاجه إلى استخدام مستوى إضافي من المراوغة لاستبدال ماكرو الوسائط (تناقش تلك الإجابة المرتبطة عامل التسلسل، ##, ، ولكنه ينطبق بالتساوي على عامل التوثيق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top