مطبعة ؟؟ و !! في تسلسل مختلف سوف تظهر إخراج مختلف
سؤال
لقد وجدت إخراجًا غريبًا عندما أكتب الأسطر التالية بطريقة بسيطة جدًا:
شفرة:
printf("LOL??!\n");
printf("LOL!!?\n");
انتاج:
يحدث حتى يتم تجميع الكود تحت كل من 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 تم تنفيذه في الأصل لأن جميع المحطات لم تدعم بعض الشخصيات.