Ctags: ج: لا يمكن تحليل الوظيفة بعد سطر الماكرو

تم إنشاؤها على ٢١ ديسمبر ٢٠١٤  ·  8تعليقات  ·  مصدر: universal-ctags/ctags

مرحبا،
لقد وجدت خطأً في تحليل C باستخدام علامات ctags (توجد أيضًا في عدد كبير من علامات ctags).

المشكلة هي ما يلي:

#include <stdio.h>

#define PRAGMA(x) _Pragma(#x)
PRAGMA(bar)
int foo() {
    int a = 1;
    printf("a = %d\n", a);
}

void main(void) {
    foo();
}

لا يحتوي إخراج ملف ctags على دالة foo() النحو التالي.

PRAGMA  f.c /^#define PRAGMA(/;"    d   file:
PRAGMA  f.c /^PRAGMA(bar)$/;"   f
main    f.c /^void main(void) {$/;" f

شكرا!!

Parser buenhancement

التعليق الأكثر فائدة

لا أعرف الخدعة لكن التحليل الجديد يحل هذا.
أنا أخذت:

PRAGMA  /tmp/enum.c /^#define PRAGMA(/;"    d   file:
foo /tmp/enum.c /^int foo() {$/;"   f
main    /tmp/enum.c /^void main(void) {$/;" f

ال 8 كومينتر

شكرا لك على الإبلاغ.
مهم لكن إصلاح هذا ليس بالأمر السهل.

ملاحظة خاصة: علينا تسجيل تعريف الماكرو في التوجيه تعريف get.c
يمكن استخدام طبقة الفلين التي أعمل في فرع. يجب اختراق دفق الإدخال.
يجب أن أتحقق من تدفق الإدخال المستند إلى الذاكرة من Geany.

تضمين التغريدة
هل أحرزت تقدمًا في هذا؟
هل فرعك متاح في مكان ما؟

لا. أنا لا أفعل أي شيء بخصوص هذا الموضوع.

ربما يمكنك استخدام ctags -I 'PRAGMA+' لتخطي جزء توسيع الماكرو.

ملاحظة خاصة: علينا تسجيل تعريف الماكرو في التوجيه تعريف طبقة الفلين get.c

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

@ b4n ، أوافق.

لا أعرف الخدعة لكن التحليل الجديد يحل هذا.
أنا أخذت:

PRAGMA  /tmp/enum.c /^#define PRAGMA(/;"    d   file:
foo /tmp/enum.c /^int foo() {$/;"   f
main    /tmp/enum.c /^void main(void) {$/;" f
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات