سؤال


لدي سؤال حول استخدام #undef لإعادة تعريف وحدات الماكرو.
لدي ملف global.h الذي يحتوي على عدد من الماكرو #Define-D. في الكود الذي يستخدم وحدات الماكرو هذه ، أجد أن القيم التي تحملها وحدات الماكرو ليست عامة بما فيه الكفاية. أريد إعادة تعريف وحدات الماكرو لجعلها أكثر عاما. كتبت مقتطف الكود التالي للقيام بذلك:

 std::cout << endl << "Enter pitch threshold:" << endl;  
 std::cin >> pitchT;  
 #ifdef PitchThreshold  
  #undef PitchThreshold  
  #define PitchThreshold pitchT   
  #endif  

أسئلتي هي:
هل يضمن استخدام #UNDEF بهذه الطريقة إعادة تعريف الماكرو عبر جميع ملفات المصدر ، أم أنه محلي في الوظيفة التي يتم فيها كتابة الخطوط المذكورة أعلاه من التعليمات البرمجية؟ ما هو نطاق مشغلي #UNDEF و #DEFINE؟
ما الذي يمكنني فعله (بصرف النظر عن تغيير وحدات الماكرو في الملف حيث يتم تحديدها #Define-D نفسها) للتأكد من تغيير تعريفات الماكرو عبر جميع ملفات المصدر؟
شكرًا،
سريرام

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

المحلول

#ifdef هو توجيه مسبق ، وهذا يعني أنه سيتم تطبيقه قبل تجميع رمز المصدر الخاص بك. وهذا يعني أن رمز المصدر "أدناه" فقط سوف يتأثر. إذا قمت بتشغيل رمز المصدر الخاص بك من خلال المعالج المسبق ، فستتمكن من رؤية النتيجة. هذا سوف يمنحك المزيد من البصيرة في عمل المعالج المسبق.

نصائح أخرى

نطاق مشغل #UNDEF هو الملف بأكمله بعد استدعائه. يتضمن ذلك جميع الملفات التي تتضمنها (لأن المعالج المسبق فقط يقوم بسلسلة الملفات معًا). لأنه جزء من المعالج المسبق ليس لديه أشياء غريبة مثل النطاق.

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