c++ - قاموس - معنى كلمة عنوان بالانجليزي




ما هي القواعد حول استخدام تسطير أسفل السطر في معرف C++؟ (4)

أما بالنسبة للجزء الآخر من السؤال ، فمن الشائع وضع الشرطة السفلية في نهاية اسم المتغير بحيث لا يتعارض مع أي شيء داخلي.

أفعل هذا حتى داخل الطبقات ومساحات الأسماء لأنني فقط يجب أن أتذكر قاعدة واحدة (مقارنة بـ "في نهاية الاسم في النطاق العالمي ، وبداية الاسم في كل مكان آخر").

من الشائع في C ++ لمتغيرات الأعضاء الاسم مع نوع من البادئة للإشارة إلى حقيقة أنها متغيرات العضو ، بدلا من المتغيرات المحلية أو المعلمات. إذا كنت قد أتيت من خلفية MFC ، m_foo الأرجح m_foo . لقد رأيت أيضا myFoo بعض الأحيان.

يبدو أن C # (أو ربما .NET فقط) توصي باستخدام تسطير أسفل السطر فقط ، كما هو الحال في _foo . هل هذا مسموح به بمعيار C ++؟


القواعد (التي لم تتغير في C ++ 11):

  • محجوزة في أي نطاق ، بما في ذلك للاستخدام كوحدات الماكرو للتنفيذ:
    • تبدأ المعرفات التي تبدأ بشرطة سفلية فورًا بحرف كبير
    • المعرّفات التي تحتوي على شرطات سفلية متجاورة (أو "شرطة سفلية مزدوجة")
  • محفوظة في مساحة الاسم العالمية:
    • تبدأ المعرفات بشرطة سفلية
  • أيضا ، كل شيء في مساحة الاسم std محجوز. (يُسمح لك بإضافة تخصصات نماذج ، على الرغم من ذلك.)

من 2003 C ++ Standard:

17.4.3.1.2 الأسماء العالمية [lib.global.names]

يتم دائمًا حجز مجموعات معينة من الأسماء والتوقيعات الوظيفية للتنفيذ:

  • كل اسم يحتوي على تسطير __ مزدوج ( __ ) أو يبدأ بعلامة تسطير متبوعة بحرف كبير (2.11) محجوز لتنفيذ لأي استخدام.
  • يتم حجز كل اسم يبدأ بـ تسطير أسفل السطر للتطبيق لاستخدامه كاسم في مساحة الاسم العامة. 165

165) هذه الأسماء محفوظة أيضًا في namespace ::std (17.4.3.1).

لأن C ++ يعتمد على المعيار C (1.1 / 2، C ++ 03) و C99 هو مرجع معياري (1.2 / 1، C ++ 03) تنطبق هذه أيضا ، من 1999 C قياسي:

7.1.3 معرفات محجوزة

يقوم كل عنوان بالتعريف أو تعريف جميع المعرفات المذكورة في الفقرة الفرعية المقترنة به ، ويعلن اختياريًا أو يحدد المعرّفات المدرجة في البند الفرعي الخاص بمتطلبات المكتبات المستقبلية والمعرّفات التي يتم الاحتفاظ بها دائمًا لأي استخدام أو لاستخدامها كمعرفات نطاق الملف.

  • يتم دائمًا حجز جميع المعرفات التي تبدأ بشرطة سفلية وحرف كبير أو تسطير سفلي آخر لأي استخدام.
  • يتم دائمًا حجز جميع المعرفات التي تبدأ بشرطة سفلية لاستخدامها كمعرّفات ذات نطاق ملف في مساحات الاسم العادية ومساحة الاسم.
  • يتم حجز كل اسم ماكرو في أي من البنود الفرعية التالية (بما في ذلك اتجاهات المكتبة المستقبلية) للاستخدام كما هو محدد إذا تم تضمين أي من الرؤوس المرتبطة بها ؛ ما لم ينص صراحة على خلاف ذلك (انظر 7.1.4).
  • يتم دائمًا حجز جميع المعرفات ذات الروابط الخارجية في أي من البنود الفرعية التالية (بما في ذلك اتجاهات المكتبة المستقبلية) لاستخدامها كمعرِّفات ذات ترابط خارجي. 154
  • يتم حفظ كل معرف بنطاق ملف مدرج في أي من البنود الفرعية التالية (بما في ذلك اتجاهات المكتبة المستقبلية) لاستخدامه كاسم ماكرو وكمعرّف بنطاق الملف في نفس مساحة الاسم إذا تم تضمين أي من الرؤوس المقترنة به.

لا يتم حجز أي معرفات أخرى. إذا قام البرنامج بتعريف معرف أو تعريفه في سياق محجوز فيه (بخلاف ما يسمح به 7.1.4) ، أو يقوم بتعريف معرف محجوز كاسم ماكرو ، فإن السلوك غير محدد.

إذا قام البرنامج بإزالة (مع #undef ) أي تعريف ماكرو معرف في المجموعة الأولى المذكورة أعلاه ، السلوك غير معرفة.

154) تتضمن قائمة المعرفات المحجوزة ذات math_errhandling الخارجية errno ، math_errhandling ، setjmp ، و va_end .

قد تنطبق قيود أخرى. على سبيل المثال ، يحتفظ معيار POSIX بالكثير من المعرفات التي من المحتمل أن تظهر في الكود العادي:

  • تبعت الأسماء التي تبدأ برأس مال E رقمًا أو حرفًا كبيرًا:
    • يمكن استخدامها لأسماء رمز الخطأ إضافية.
  • الأسماء التي تبدأ بـ إما أو متبوعة بحرف صغير
    • يمكن استخدامها لاختبار وظائف إضافية ووظائف التحويل.
  • الأسماء التي تبدأ بـ LC_ متبوعة بحرف كبير
    • يمكن استخدامها لوحدات الماكرو إضافية تحدد سمات اللغة.
  • يتم حجز أسماء جميع وظائف الرياضيات الموجودة الملصقة بـ f أو l
    • للوظائف المناظرة التي تعمل على الحجج المزدوجة العائمة والطويلة ، على التوالي.
  • يتم الاحتفاظ بالأسماء التي تبدأ بـ SIG متبوعة بحرف كبير
    • لأسماء إشارة إضافية.
  • يتم حجز الأسماء التي تبدأ بـ SIG_ متبوعة بحرف كبير
    • لمزيد من إجراءات الإشارة.
  • يتم حجز الأسماء التي تبدأ بـ str أو mem أو wcs متبوعة بحرف صغير
    • لسلسلة إضافية ووظائف الصفيف.
  • يتم الاحتفاظ بالأسماء التي تبدأ بـ PRI أو SCN متبوعة بأي حرف صغير أو X
    • للحصول على وحدات ماكرو محدد محدد إضافية
  • الأسماء التي تنتهي بـ _t محفوظة
    • لأسماء الأنواع الإضافية.

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

شخصيا أنا فقط لا تبدأ المعرفات مع شرطات سفلية. إضافة جديدة إلى القاعدة: لا تستخدم الشرطات المزدوجة في أي مكان ، وهو أمر سهل لأنني نادراً ما أستخدم تسطير أسفل السطر.

بعد إجراء بحث حول هذه المقالة ، لم أعد أقوم بإنهاء المعرفات الخاصة بي مع _t لأن هذا محجوز بمعيار POSIX.

القاعدة عن أي معرف تنتهي بـ _t فاجأتني كثيرا. وأعتقد أن هذا هو معيار POSIX (لست متأكدا بعد) تبحث عن التوضيح والفصل الرسمي والآية. هذا من دليل جنو ليتبول ، قائمة الأسماء المحجوزة.

قدم سيزارب الرابط التالي للرموز والملاحظات المحجوزة في opengroup.org/onlinepubs/009695399/functions/xsh_chap02_02.html والتي يمكن العثور عليها في العديد من البادئات والاحتياطات المحجوزة الأخرى. يتم تعريف رموز POSIX 2008 المحجوزة هنا. القيود هي إلى حد ما أكثر دقة من تلك المذكورة أعلاه.


من MSDN :

يتم استخدام استخدام حرفين تسطير أسفل السطر (__) في بداية معرف ، أو شرطة سفلية واحدة متبوعة بحرف كبير ، للتطبيقات C ++ في جميع النطاقات. يجب تجنب استخدام شرطة سفلية واحدة متبوعة بحرف صغير للأسماء ذات نطاق الملف بسبب تعارض محتمل مع المعرّفات المحجوزة الحالية أو المستقبلية.

هذا يعني أنه يمكنك استخدام تسطير سفلي واحد كبادئة متغير عضو ، طالما أنه يتبعه حرف صغير.

يبدو أن هذا مأخوذ من القسم 17.4.3.1.2 من معيار C ++ ، ولكن لا يمكنني العثور على مصدر أصلي للمعيار الكامل عبر الإنترنت.

انظر أيضا هذا السؤال .


نعم ، يمكن استخدام الشرطات السفلية في أي مكان في المعرف. أعتقد أن القواعد هي: أي من az ، AZ ، _ في الحرف الأول و + 0-9 للأحرف التالية.

تعتبر البادئات السفلية شائعة في كود C - وهي تسطير سفلي واحد يعني "خاص" ، ويتم حجز الشُرط السفلية المزدوجة عادة للاستخدام من قبل المحول البرمجي.





c++-faq