مطبعة ؟؟ و !! في تسلسل مختلف سوف تظهر إخراج مختلف

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

  •  27-09-2019
  •  | 
  •  

سؤال

لقد وجدت إخراجًا غريبًا عندما أكتب الأسطر التالية بطريقة بسيطة جدًا:

شفرة:

 printf("LOL??!\n");
 printf("LOL!!?\n");

انتاج:alt text

يحدث حتى يتم تجميع الكود تحت كل من MBCs و Unicode.

يختلف الإخراج على تسلسل "؟" و "!"...

اي فكرة؟

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

المحلول

قد تحاول

printf( "What?\?!\n" );

في برمجة الكمبيوتر ، تعد Digraphs و Trigraphs تسلسلًا من أحرفين وثلاثة أحرفين على التوالي يتم تفسيرها على أنها حرف واحد من قبل لغة البرمجة.

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

نصائح أخرى

??! هو trigraph يتم استبداله |.

كقاعدة عامة ، يجب ألا تضع أحرفًا لعلامة استفهام معًا في أي مكان في ملف مصدر.

يطلق عليهم تسلسل Trigraph

??! هو تسلسل trigraph للشريط العمودي |.

يتعرف المعالج المسبق C/C ++ على Trigraphs ويحل محلهم بطابعهم المكافئ.
لذلك بحلول الوقت الذي يظهر فيه المترجم الكود الخاص بك ، يتم استبدال trigraphs بالفعل.

# grepping in the source file:
$ grep printf a.c      
  printf("foo: ??!");

# grepping the preprocessor output:
$ gcc a.c -trigraphs -E | grep printf | grep foo
  printf("foo: |");

ال ؟؟! يُعرف باسم Trigraph ويتم استبداله بـ | في الإخراج. افحص هذا حلقة الوصل

إنه تسلسل خاص للأحرف في سلسلة ثابتة لها معنى خاص. يسمى trigraph تم تنفيذه في الأصل لأن جميع المحطات لم تدعم بعض الشخصيات.

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