يتضمن هذا المشروع أدوات وقوائم لمعرفة جميع أعلام التحذير التي تحتويها مجموعة البروتوكول المبرمج ومجموعة برنامج GNU على لغات العائلة C (C ، C ++ ، و Objective-C). يوضح هذا أيضًا جميع الأسماء المستعارة وعلامات التحذير التي يمكّنها علامة معينة (مسبقة بحرف "#") بحيث يمكنك بسهولة معرفة العلم الذي يتم تمكينه من خلال ما. هناك أيضًا أعلام تحذير لا تفعل شيئًا لأسباب توافق أو إهمال. يتم احتواءها بنص "# Dummy Switch".
الغرض من هذه المجموعات هو جعل أكثر سهولة في استخدام أدوات تحليل التعليمات البرمجية الثابتة التي يقدمها المترجمون.
يتضمن Clang -Weverything
الذي لا يظهر في هذه القوائم ، والذي يمكّن جميع التحذيرات. توفر وثائق Clang مرجعًا لبعض أعلام التشخيص في Clang.
إذا كنت بحاجة إلى قائمة كاملة بخيارات تحذير GCC ، للحصول على إصدار محدد من GCC لديك ، يمكنك تشغيل GCC مع gcc --help=warnings
للحصول على تلك القائمة. وإلا فإن بعض قوائم خيارات التحذير من مجلس التعاون الخليجي متوفرة أدناه:
تتمثل إحدى حالات الاستخدام لهذه الأنواع من القوائم في معرفة الاختلافات الموجودة بين مختلف المترجمين وإصدارات البرمجيات. لقد أتاحت اختلافات علامات البرمجيات بدائية بين نسختين مترجمتين ناتجا عن ملفات الاختلاف ، ولكن للحصول على اختلافات أكثر تحديدًا ، تحتاج إلى استخدام بعض برنامج Diff (البصري) ، كما هو موضح أدناه:
يستخدم هذا AntlR كمولد محلل مع بعض رمز Python الداعمة لتحليل أعلام تحذير من ملفات بيانات خيار المترجم الفعلي. المتطلبات الأخرى تتبع (بالإضافة إلى تبعياتها):
بعد تثبيت جميع المتطلبات وتكون قادرة على تشغيل AntlR مع أمر antlr4
، ما عليك سوى استخدام الأوامر التالية في parsers/
الدليل لإنشاء هذه القوائم بنفسك:
ninja
./parse-clang-diagnostic-groups.py <path-to-clang-source>/include/clang/Basic/DiagnosticGroups.td
./parse-gcc-warning-options.py <path-to-gcc-source>/gcc/{common.opt,c-family/c.opt}
وستحصل على قائمة جميع أعلام التحذير الفردية وتبعياتها الموجودة في إصدار المترجم المطلوب.
لإنشاء قوائم مرشح ، يمكنك استخدام المفاتيح --top-level
و- --unique
.
--top-level
تحذيرات يتم تمكينها بواسطة بعض التبديل الآخر في القائمة.--unique
جميع التحذيرات دون أي معلومات ما هي التحذيرات الأخرى التي تمكنها. يتم إنشاء Diffs في هذه الصفحة من هذه الملفات. هناك بعض اختبارات الوحدة التي تختبر وظائف المستوى المنخفض. يمكنك تشغيل الوقت باستخدام أمر ninja test
في parsers/
Directory للتحقق من تمرير اختبارات الوحدة.
عندما يحصل المحلل على تغيير يؤثر على التنسيق أو الإخراج الآخر لملفات متعددة ، يجب إعادة إنشاء قوائم التحذير هذه. هناك البرامج النصية process-clang-git.sh
و process-gcc-git.sh
التي تأخذ جذر مستودع GIT كمعلمة أولها وتطبيق جميع المتغيرات المختلفة لهذه الأوامر لإنشاء الملفات النصية النهائية.