لماذا يستخدم الأشخاص __ (شرطة سفلية مزدوجة) كثيرًا في لغة C++

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

  •  03-07-2019
  •  | 
  •  

سؤال

كنت ألقي نظرة على بعض أكواد C++ مفتوحة المصدر ولاحظت وجود الكثير من النقاط المزدوجة عند استخدامها في الكود، خاصة في بداية أسماء المتغيرات.

return __CYGWIN__;

فقط أتساءل هل هناك سبب لذلك، أم أن بعض الأشخاص يقومون ببرمجة الأنماط فقط؟أعتقد أنني أجعل من الصعب قراءتها.

نصائح أخرى

وإذا لم يشعرون بأنهم "جزء من التنفيذ"، أي المكتبات القياسية، ثم أنها لا ينبغي.

والقواعد هي محددة إلى حد ما، وقليلا أكثر تفصيلا من البعض الآخر قد اقترح.

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

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

وهذا هو السبب في مايكروسوفت استخدام أسماء وظيفة مع تسطير الرائدة وجميع في صغيرة بالنسبة لكثير من وظائف مكتبة وقت التشغيل الأساسية الخاصة بهم والتي ليست جزءا من المعيار C ++. وتضمن هذه الأسماء وظيفة لا تتعارض مع أي من الوظائف القياسية C ++ أو وظائف رمز المستخدم.

ووفقا ل++ C القياسية، محجوزة معرفات بدءا تسطير واحد للمكتبات. محجوزة معرفات بدءا من ليؤكد للبائعين مترجم.

والتعليقات السابقة صحيحة. __Symbol__ عموما هو رمز السحرية التي يقدمها ببائع مترجم مفيدة (أو المعالج). ولعل الأكثر استخداما على نطاق واسع من هذه __FILE__ و__LINE__، والتي سعت من قبل C المعالج للإشارة إلى اسم الملف ورقم السطر الحالي. هذا مفيد عندما تريد تسجيل نوعا من عدم تأكيد البرنامج، بما في ذلك موقع نصية الخطأ.

وهذا شيء كنت لا يعني أن تفعل في التعليمات البرمجية "عادية". هذا يضمن أن المجمعين والمكتبات النظام يمكن تحديد الرموز التي لن تصطدم مع يدكم.

وبالإضافة إلى المكتبات التي استجاب لها العديد من الأشخاص الآخرين حول بعض الناس أيضا تسمية وحدات الماكرو أو القيم رقم تعريف للاستخدام مع المعالج. هذا من شأنه أن يجعل من الاسهل للعمل مع، وربما يسمح الخلل في المجمعين القديمة أن عملت حولها.

ومثل الآخرين المذكورة، فإنه يساعد على منع اصطدام اسم ويساعد على ترسيم بين المتغيرات مكتبة وبنفسك.

يستشهد بالإجابة الأعلى صوتًا البرمجة بلغة C++:القواعد والتوصيات:

"إن استخدام الشرطتين السفليتين (`__') في المعرفات محجوز للاستخدام الداخلي للمترجم وفقًا لمعيار ANSI-C."

ومع ذلك، يبدو أن مطالبة تلك الصفحة غير صحيحة

لقد بحثت في عدد قليل من معايير C++ وC، ولم أتمكن من العثور على أي ذكر للشرطات السفلية التي تقتصر على الاستخدام الداخلي للمترجم.

سي ++ (مسودة العمل الحالية، تم الوصول إليها في 2019-5-26) تنص على lex.name:

  • كل معرف يحتوي على شرطة سفلية مزدوجة __ أو يبدأ بشرطة سفلية متبوعة بحرف كبير يتم حجزه للتنفيذ لأي استخدام.
  • يتم حجز كل معرف يبدأ بشرطة سفلية للتنفيذ لاستخدامه كاسم في مساحة الاسم العامة.

ليرة تركية؛دكتور:الشرطات السفلية المزدوجة محجوزة للتنفيذ

على الرغم من أن هذا السؤال خاص بـ C++، فقد استشهدت بالأقسام ذات الصلة من معايير C 99 و17:

C99 القسم 7.1.3

  • جميع المعرفات التي تبدأ بشرطة سفلية وإما حرف كبير أو شرطة سفلية أخرى تكون دائمًا محفوظة لأي استخدام.
  • يتم دائمًا حجز جميع المعرفات التي تبدأ مع السطح السفلي للاستخدام كمعرفات مع نطاق الملف في كل من المساحات العادية والعلامة.

ج17 يقول نفس الشيء مثل C99.

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