سؤال

لقد قرأت هذا فقط قطعة جميلة من Reddit.

يذكرون ذلك and و or كونها "الرموز البديلة" ل && و ||

كنت غير مدرك حقا لهذه حتى الآن. بالطبع، الجميع يعرف عن di-graphs و tri-graphs, ، لكن and و orب منذ متى؟ هل هذه إضافة حديثة إلى المعيار؟

لقد قمت بالتحقق من ذلك مع Visual C ++ لعام 2008 ولا يبدو أنه يتعرف على هذه أي شيء آخر غير خطأ في بناء الجملة. ماذا يحدث هنا؟

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

المحلول

تدعمهم MSVC ككلمات رئيسية فقط إذا كنت تستخدم /Za خيار لتعطيل الامتدادات؛ هذا صحيح من VC7.1 على الأقل (VS2003).

يمكنك الحصول عليها مدعومة كوحدات الماكرو بما في ذلك iso646.h.

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

تمت مناقشة هذا في سؤال قبل أسبوعين في مكان ما هنا، لكن لا يمكنني الحصول على البحث أو جوجل للعثور على شيء لعنة.

نصائح أخرى

من المعيار C ++ 11، 2.6/ Alternative tokens:

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

الجدول 2 - الرموز البديلة

alternative primary | alternative primary | alternative primary
--------------------+---------------------+--------------------
   <%          {    |    and         &&   |    and_eq      &=
   %>          }    |    bitor       |    |    or_eq       |=
   <:          [    |    or          ||   |    xor_eq      ^=
   :>          ]    |    xor         ^    |    not         !
   %:          #    |    compl       ~    |    not_eq      !=
   %:%:        ##   |    bitand      &    |

للإجابة فعلا على السؤال:

تم تعريفها في أول معيار C ++.

انظر معيار C ++. مشروع اللجنة رقم 2 متاح بحرية في ftp://ftp.research.att.com/dist/c++sted/wp/cd2/bled.pdf., ، على الرغم من أنه غير موثوق به، فإنه غير صحيح، وقبل جزئيا في بعض الأماكن. على وجه التحديد، في القسم 2.5، الرموز البديلة, ، يتم تعريف ما يلي:

الأساسي البديل <٪ {٪>} <: [:>]٪: #٪:٪: ## و && Bitor | أو ||. XOR ^ comple ~ bitand & and_eq & = or_eq | = xor_eq ^ = لا! not_eq! =

على الرغم من بصراحة، فإنني لم أر أي منهم من أي وقت مضى and, or, ، و not, وحتى ذلك الحين، تلك نادرة. لاحظ أن هذه غير مسموح بها افتراضيا في رمز C عادي، فقط في C ++. إذا كنت ترغب في استخدامها في C، فسيتعين عليك إما #define لهم نفسك كوحدات الماكرو، أو #include رأس <iso646.h>, ، الذي يحدد كل ما سبق باستثناء <% >% <: :> %: %:%: كوحدات الماكرو (انظر القسم 7.9 من معيار C99).

قد تفاجأ بالتعرف على ما تبقى منها:

and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq

القائمة من الكلمات المفتاحية C ++..

أعتقد أن الإصدارات الحديثة من دول مجلس التعاون الخليجي تدعم هذه الكلمات الرئيسية.

على الرغم من أن السؤال قديم، أود أن أقدمه إجابة كاملة أو أقل: كانت الرموز البديلة كانت بالفعل جزءا من C ++ 98 المسحوق حاليا (ISO / IEC 14882: 1998, ، الذي أعتقد، كان أول معيار ISO ل C ++). في حين ليس دليلا في حد ذاته (ولا أملك نسخة من ISO ل C ++ 98)، إليك رابط - انظر قسم C ++.

كما ذكر في الإجابات الأخرى، ينتهك مترجم MSVC lex.digraph قسم من المعيار عندما / زا لم يتم تحديد العلم.

يحملها GNU Compiler G ++، لكنني لا أعرف عن MS VC ++.

يمكنك الحصول على نفس الوظيفة عن طريق وضع هذا في الجزء العلوي من ملف التعليمات البرمجية.

#define and &&
#define bitor |
#define or ||
#define xor ^
#define compl ~
#define bitand &
#define and_eq &=
#define or_eq ^=
#define xor_eq ^=
#define not !
#define not_eq !=

على الرغم من أن هذا هو تتبع كيندا، فإنه يجب أن يعمل.

هم في ورقة العمل لمعيار C ++ الجديد، في الصفحة 14:C ++ المعيار

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