هل هناك وسيلة نظيفة لمنع النوافذ.ساعة من خلق بالقرب & بعيدا ماكرو ؟

StackOverflow https://stackoverflow.com/questions/118774

  •  02-07-2019
  •  | 
  •  

سؤال

في أعماقي في WinDef.ح هناك بقايا من تجزئة الذاكرة العصر:

#define far
#define near

ومن الواضح أن هذا يسبب مشاكل عند محاولة استخدام قريب أو بعيد مثل أسماء المتغيرات.أي نظيفة الحلول?الأخرى ثم إعادة تسمية بلدي المتغيرات ؟

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

المحلول

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

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

نصائح أخرى

Undefine أي وحدات الماكرو كنت لا تريد بعد ذلك windows.h:

#include <windows.h>
#undef near
#undef far

ربما:

#undef near
#undef far

يمكن أن تكون خطيرة على الرغم من...

ربما كنت لا تريد أن undefined القريب والبعيد في كل مكان.ولكن عندما تحتاج إلى استخدام أسماء المتغيرات ، يمكنك استخدام التالية undefine الماكرو محليا وإضافته مرة أخرى عند الانتهاء.

#pragma push_macro("near")
#undef near
//your code here.
#pragma pop_macro ("near")

أفضل لا.يتم تعريف التوافق مع كبار السن رمز - إذا كنت حصلت على التخلص منهم بطريقة أو بأخرى ومن ثم في وقت لاحق في حاجة إلى استخدام بعض من تلك المدونة القديمة سوف تكون مكسورة.

يمكن للمرء أن يجادل بأن "قريب" و "بعيد" ليست وصفية أسماء المتغيرات.هل تعتبر ببساطة تقديم تفاصيل إضافية في اسم المتغير لحل الصراع (أيnearest_match, furthest_match).مجرد فكرة.

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