سؤال

لقد أنشأت مشروعا جديدا مع شريحة التعليمات البرمجية التالية:

char* strange = "(Strange??)";
cout << strange << endl;

مما أدى إلى الإخراج التالي:

(غريب

وبالتالي الترجمة "؟)" -> '

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

أي شخص لديه تفسير؟

  • البحث: "علامة استفهام، علامة الاستفهام، إغلاق هدفين" C C ++ سلسلة حرفية
هل كانت مفيدة؟

المحلول

ما تراه يسمى المخيث.

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

دول مجلس التعاون الخليجي يتجاهل المهاجرات التقاطات افتراضيا لأن أي شخص يستخدمها عمدا. تمكنهم مع -trigraph الخيار، أو أخبر المترجم تحذيرك عنها مع -Wtrigraphs اختيار.

Visual C ++ 2010 أيضا تعطيلها بشكل افتراضي وعروض /Zc:trigraphs لتمكينهم. لا يمكنني العثور على أي شيء حول طرق تمكينها أو تعطيلها في الإصدارات السابقة.

نصائح أخرى

طريقة سهلة لتجنب مفاجأة الهياجف: انقسام "؟؟" سلسلة حرفية في اثنين:

char* strange = "(Strange??)";
char* strange2 = "(Strange?" "?)";
/*                         ^^^ no punctuation */

تعديل
لدى دول مجلس التعاون الخليجي خيار تحذير حول المهاجرين: -Wtrigraphs (ممكن مع -Wall ايضا)
End Edit.

ونقلت من المعيار

 5.2.1.1 تسلسل المهاجرة 1 قبل إجراء أي معالجة أخرى، يتم استبدال كل حدوث أحد التسلسلات التالية من ثلاثة أحرف (تسمى TRIGRAPH SHELLICENS13) بالحرف الفردي المقابل. ؟؟ = #؟)] ؟؟! | ؟؟ ([؟؟ "^؟>} ؟؟ /  ؟؟ <{؟
 5.1.1.2 مراحل الترجمة 1 الأسبقية بين قواعد بناء جملة الترجمة المحددة من قبل المراحل التالية. 1. يتم تعيين ملفات المصدر المادي Multibyte Multibyte، بطريقة محددة بالتنفيذ، إلى مجموعة الأحرف المصدر (إدخال أحرف سطر جديدة لمؤشرات نهاية الخط) إذا لزم الأمر. يتم استبدال تسلسل المهاجرين بالتمثيلات الداخلية ذات الطابع الواحد المقابلة.

انه المخيث!

؟؟) هو المخيث.

هذا المخيث الدعم. يمكنك منع تفسير الأجهزة الهوية عن طريق الهروب من أي من الشخصيات:

char* strange = "(Strange?\?)";

انه المخيث.

المهاجرات المهيورة هي السبب. ينطبق الحديث عن C في المقالة أيضا على C ++

كما ذكر عدة مرات، أنت تعرض للعض بواسطة المخيج. انظر هذا السابق سؤال حتى الآن للحصول على مزيد من المعلومات:

يمكنك حل المشكلة باستخدام "؟" هروب التسلسل ل "؟" حرف:

char* strange = "(Strange\?\?)";

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

أثناء محاولة ترجمة Complet-compled على دول مجلس التعاون الخليجي، اختار التسلسل الخاص بي المخيث:

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

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

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