سؤال

لدي ماكرو مايلي لتحديد وظيفة جديدة بعد نظام تسمية خاص:

#define CREATE_HOOK_STUB( func ) void ##func_STUB() { /* some code*/ }

ومع ذلك، فإن Preprocessor دائما يتسلسل void و ##func_STUB لكن من الواضح أنني أريدها الحفاظ على المسافة البيضاء في هذا الموقف.

أعلم أنني يمكن أن أسفرت فقط بعض السلسلة إلى ##func_STUB, ، ولكن هذا ليس ما أريد. كيف سأحل هذا؟

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

المحلول

أعتقد أن ما تريده حقا هو أقرب إلى:

#define CREATE_HOOK_STUB( func ) void func##_STUB() { /* some code*/ }

ولكن يجب أن ننظر أيضا هذا مرتبط حتى الإجابة التي لديها بعض التفاصيل الإضافية حول سلوك مشغل اللصق الرمز المميز:

هناك شيء واحد يجب أن يدركه عند استخدام مشغلي المعالجين ("##" ("##") أو باخترية ('#') هو أنه يتعين عليك استخدام مستوى إضافي من غير مباشر لهم للعمل بشكل صحيح في جميع الحالات.

إذا لم تقم بذلك، فإن العناصر التي تم تمريرها إلى المشغل الرمز المميز من وحدات ماكرو أنفسهم، فستحصل على نتائج ربما لا تكون ما تريد ...

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