سؤال

وأستخدمه بعض الماكرو في ملفي المصدر (* .C).

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

والمسألة هي أننا نستخدم ماكرو #defined إلى 10 في بعض الملفات رأس، ولكن يتم تلقي القيمة في متاحة 4. وذلك بدلا من الذهاب والتدقيق في كافة الملفات DEP، نريد أن نعرف أكان هناك بعض طريقة مباشرة لتحديد المصدر الذي حصلت حل الماكرو.

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

المحلول

إذا كنت مجرد تشغيل حزب الشعب الكمبودي (وC المعالج) على الملف، فإن الناتج يحتوي على توجيهات #line النموذج

#line 45 "silly-file-with-macros.h"

وللمترجم قائلا أين جاء كل من. حتى طريقة واحدة لاستخدام

 cpp my-file.c | more

وابحث عن التوجيه #line.

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

test-eof.c:5:1: warning: "FRED" redefined
test-eof.c:3:1: warning: this is the location of the previous definition

(وهذا من دول مجلس التعاون الخليجي) التي يجب أن أقول لكم أين تم تعريف الماكرو سابقا. ولكن حان للتفكير في الأمر، كيف يتم ذلك كنت لا تحصل على هذا التحذير بالفعل؟

وهناك فكرة أخرى تتمثل في استخدام makedepend للحصول على قائمة من كافة الملفات المدرجة، ثم البقرى لهم لخطوط #define فيها.

نصائح أخرى

والبقرى ل# تعريف؟

find / -name '*.h' | xargs -L 100 grep -H macroname

وهناك ثلاث قيادات هناك. ويختار الأمر find الملفات التي سيتم البحث بحيث يمكن تغيير ذلك إلى '<م> .C "أو" .CPP "أو كل ما تحتاجه. ثم الأمر xargs، انشقاقات قائمة الملفات إلى 100 في وقت واحد بحيث لا تجاوز بعض الداخلي قيادة قذيفة حجم المخزن المؤقت. ثم يتم تشغيل الأمر البقرى مرارا وتكرارا مع كل قائمة من 100 ملف ويطبع أي أسماء تحتوي على macroname وسطر من التعليمات البرمجية التي تستخدمها.

ومن هذا يجب أن تكون قادرا على رؤية حيث يتم تعريف ذلك.

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