سؤال
لدي سؤال حول استخدام #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 هو الملف بأكمله بعد استدعائه. يتضمن ذلك جميع الملفات التي تتضمنها (لأن المعالج المسبق فقط يقوم بسلسلة الملفات معًا). لأنه جزء من المعالج المسبق ليس لديه أشياء غريبة مثل النطاق.