على الشرطات السفلية والأسماء المحجوزة في لغات C و C ++

ريموند تشين

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

تم جمع قواعد C ++ في فصل [lex.name]. تتطابق قواعد C في الغالب مع قواعد C ++ (القسم 7.1.3 "المعرفات المحجوزة") ، مما يسهل تذكرها. نمط الشروط يبدأ بشرطة سفلية احتياطي يبدأ بشرطة سفلية وحرف كبير احتياطي يبدأ بشرطة سفلية وشيء آخر محجوز في النطاق العالمي (بما في ذلك وحدات الماكرو) يحتوي على شرطين سفليين متتاليين محجوزة في C ++ (ولكنها صحيحة في C)

لاحظ أن العرف الشائع المتمثل في وضع بادئة للأعضاء الخاصين بشرطة سفلية يخرق هذه القواعد إذا كان اسم العضو يبدأ بحرف كبير. القطعة الطبقة { عامة: القطعة () ؛ خاص: عدد صحيح _size ؛ // تمام باطل _Toggle () ؛ // ليس جيدا } ؛

لا تحتوي لغة C على مساحات أسماء ، لذلك يجب أيضًا حجز الأسماء في مساحة الاسم العالمية للتوسع في المستقبل. لا يجوز استخدام بعض الأسماء بواسطة رموز مرتبطة خارجيًا. يمكنك استخدامها لأسماء الأنواع وأعضاء التعداد والمتغيرات المحلية والوظائف أو المتغيرات العامة المُعلنة بفئة تخزين ثابتة ، ولكن ليس للوظائف الخارجية أو المتغيرات العامة الخارجية. // غير مخول: المعرف مع الارتباط الخارجي // يبدأ بـ "str" ​​وحرف صغير. استراتيجية int؛ مهاجم باطل () {/ * ... * /} // المسموح بها: المعرف يبدأ بالرابط الداخلي // مع "str" ​​وحرف صغير. قاطع int ثابت ثابت فارغ stream_video () {/ * ... * /}

أيضًا ، إذا قمت بتضمين ملف الرأس المقابل ، فيمكن إخفاء الأسماء بوحدات ماكرو تشبه الوظائف. هذا يعني أنك إذا كنت تنوي استخدام اسم محجوز لشيء ما بدون ارتباط خارجي ، فيجب عليك أولاً #undef أو تضمين الاسم بين قوسين لمنع معاملته على أنه ماكرو. // قد يؤدي تضمين هذا العنوان في الإعداد // لوظيفة ماكرو تسمى "استراتيجية". #تفهم // يجب وضعه بين قوسين لتجنب سوء التفسير // كوظيفة شبيهة بوظيفة الماكرو. فراغ ثابت (سياسة) () ؛

اعتبارًا من C11 ، لا يمكن استخدام المعرفات التي تطابق التعبيرات العادية التالية للرموز المرتبطة خارجيًا. (القائمة موجودة في القسم 7.31: "اتجاهات المكتبة المستقبلية".) هناك أيضًا أسماء محجوزة لتعريفات الأنواع ووحدات الماكرو ، لكنني لن أسردها هنا. نمط في الراس cerfc؟ [fl] ؟، cexp2 [fl] ؟، cexpm1 [fl] ؟، clog1 [0p] [fl] ؟، clog2 [fl] ؟، c [lt] gamma [fl]؟ مجمع هو [a-z]. * ، في [a-z]. * ctype.h ، wctype.h الذرية_ [a-z]. * stdatomic.h str [a-z]. * stdlib.h ، سلسلة. h mem [a-z]. * سلسلة. h wcs [من الألف إلى الياء]. * string.h، wchar.h cnd_ [a-z]. *، mtx_ [a-z]. *، thrd_ [a-z]. *، tss_ [a-z]. * ذ ...

على الشرطات السفلية والأسماء المحجوزة في لغات C و C ++

ريموند تشين

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

تم جمع قواعد C ++ في فصل [lex.name]. تتطابق قواعد C في الغالب مع قواعد C ++ (القسم 7.1.3 "المعرفات المحجوزة") ، مما يسهل تذكرها. نمط الشروط يبدأ بشرطة سفلية احتياطي يبدأ بشرطة سفلية وحرف كبير احتياطي يبدأ بشرطة سفلية وشيء آخر محجوز في النطاق العالمي (بما في ذلك وحدات الماكرو) يحتوي على شرطين سفليين متتاليين محجوزة في C ++ (ولكنها صحيحة في C)

لاحظ أن العرف الشائع المتمثل في وضع بادئة للأعضاء الخاصين بشرطة سفلية يخرق هذه القواعد إذا كان اسم العضو يبدأ بحرف كبير. القطعة الطبقة { عامة: القطعة () ؛ خاص: عدد صحيح _size ؛ // تمام باطل _Toggle () ؛ // ليس جيدا } ؛

لا تحتوي لغة C على مساحات أسماء ، لذلك يجب أيضًا حجز الأسماء في مساحة الاسم العالمية للتوسع في المستقبل. لا يجوز استخدام بعض الأسماء بواسطة رموز مرتبطة خارجيًا. يمكنك استخدامها لأسماء الأنواع وأعضاء التعداد والمتغيرات المحلية والوظائف أو المتغيرات العامة المُعلنة بفئة تخزين ثابتة ، ولكن ليس للوظائف الخارجية أو المتغيرات العامة الخارجية. // غير مخول: المعرف مع الارتباط الخارجي // يبدأ بـ "str" ​​وحرف صغير. استراتيجية int؛ مهاجم باطل () {/ * ... * /} // المسموح بها: المعرف يبدأ بالرابط الداخلي // مع "str" ​​وحرف صغير. قاطع int ثابت ثابت فارغ stream_video () {/ * ... * /}

أيضًا ، إذا قمت بتضمين ملف الرأس المقابل ، فيمكن إخفاء الأسماء بوحدات ماكرو تشبه الوظائف. هذا يعني أنك إذا كنت تنوي استخدام اسم محجوز لشيء ما بدون ارتباط خارجي ، فيجب عليك أولاً #undef أو تضمين الاسم بين قوسين لمنع معاملته على أنه ماكرو. // قد يؤدي تضمين هذا العنوان في الإعداد // لوظيفة ماكرو تسمى "استراتيجية". #تفهم // يجب وضعه بين قوسين لتجنب سوء التفسير // كوظيفة شبيهة بوظيفة الماكرو. فراغ ثابت (سياسة) () ؛

اعتبارًا من C11 ، لا يمكن استخدام المعرفات التي تطابق التعبيرات العادية التالية للرموز المرتبطة خارجيًا. (القائمة موجودة في القسم 7.31: "اتجاهات المكتبة المستقبلية".) هناك أيضًا أسماء محجوزة لتعريفات الأنواع ووحدات الماكرو ، لكنني لن أسردها هنا. نمط في الراس cerfc؟ [fl] ؟، cexp2 [fl] ؟، cexpm1 [fl] ؟، clog1 [0p] [fl] ؟، clog2 [fl] ؟، c [lt] gamma [fl]؟ مجمع هو [a-z]. * ، في [a-z]. * ctype.h ، wctype.h الذرية_ [a-z]. * stdatomic.h str [a-z]. * stdlib.h ، سلسلة. h mem [a-z]. * سلسلة. h wcs [من الألف إلى الياء]. * string.h، wchar.h cnd_ [a-z]. *، mtx_ [a-z]. *، thrd_ [a-z]. *، tss_ [a-z]. * ذ ...

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow