سؤال

هل يلتزم أي محرر بتوجيهات C #line فيما يتعلق بميزات خط goto؟

سياق:أنا أعمل على منشئ الأكواد وأحتاج إلى الانتقال إلى سطر من الإخراج ولكن تم تحديد السطر بالنسبة إلى توجيهات #line التي أقوم بإضافتها.يمكنني إسقاطها ولكن العثور على خط الإدخال يمثل ألمًا أسوأ

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

المحلول

إذا كان المحرر قابلاً للبرمجة النصية، فمن الممكن كتابة برنامج نصي للقيام بالتنقل.قد يكون هناك برنامج نصي Vim أو Emacs يقوم بالفعل بشيء مماثل.

FWIW عندما أكتب الكثير من Bison/Flexx كتبت أ زيوس برنامج Lua الماكرو النصي الذي حاول القيام بشيء مماثل (أي.انتقل من ملف الإدخال إلى السطر المقابل لملف الإخراج عن طريق البحث عن علامة #line).

لأي شخص قد يكون مهتما هنا هذا البرنامج النصي الماكرو معين.

نصائح أخرى

#line عادةً ما يتم إدراج التوجيهات بواسطة المترجم المسبق، وليس في التعليمات البرمجية المصدر، لذلك لن يحترم المحررون عادةً ذلك إذا كان امتداد الملف هو .c.

ومع ذلك، فإن امتداد الملف العادي للملفات التي تم تجميعها بعد ذلك هو .i أو .gch, ، لذا يمكنك محاولة استخدام ذلك ورؤية ما سيحدث.

لقد استخدمت ما يلي في ملف رأس من حين لآخر لإنتاج عناصر قابلة للنقر في VC6 ونافذة برنامج التحويل البرمجي VS (2003+) الأخير.

في الأساس ، يستغل هذا حقيقة أن إخراج العناصر في إخراج التحويل البرمجي يتم تحليله بشكل أساسي من أجل "المسار (الكتان):رسالة".

يفترض هذا معالجة مترجم Microsoft لـ "تذكير pragma".

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

    // The following definitions will allow you to insert
    // clickable items in the output stream of the Microsoft compiler.
    // The error and warning variants will be reported by the
    // IDE as actual warnings and errors... which means you can make
    // them occur in the task list.

    // In theory, the coding standards could be checked to some extent
    // in this way and reminders that show up as warnings or even
    // errors inserted...


    #define strify0(X) #X
    #define strify(X) strify0(X)
    #define remind(S) message(__FILE__ "(" strify( __LINE__ ) ") : " S)

    // example usage
    #pragma remind("warning:  fake warning")
    #pragma remind("error:  fake error")

لم أجربه منذ فترة ولكن يجب أن يعمل.

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

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