كيفية تعطيل #pragma التحذيرات ؟
-
02-07-2019 - |
سؤال
أثناء تطوير تطبيق C++, اضطررت إلى استخدام مكتبة 3rd الطرف التي تنتج كمية كبيرة من التحذيرات ذات الصلة مع غير مؤذية #pragma التوجيه المستخدمة.
../File.hpp:1: warning: ignoring #pragma ident
In file included from ../File2.hpp:47,
from ../File3.hpp:57,
from File4.h:49,
هل من الممكن أن تعطيل هذا النوع من تحذيرات عند استخدام GNU C++ compiler?
المحلول
أعتقد أنك يمكن أن تجمع مع
-Wno-unknown-pragmas
إلى قمع هذه.
نصائح أخرى
في دول مجلس التعاون الخليجي ، ترجمة مع Wno-غير معروف-pragmas
في MS Visual Studio 2005 (هذا السؤال ليس ذات الكلمات الدلالية مع دول مجلس التعاون الخليجي ، لذلك أنا مضيفا ان هذا للمرجعية), يمكنك تعطيل عالميا في المشروع إعدادات->C/C++->خيارات متقدمة.أدخل 4068 في "تعطيل تحذيرات محددة"
أو يمكنك إضافته إلى أي ملف إلى تعطيل تحذيرات محليا
#pragma warning (disable : 4068 ) /* disable unknown pragma warnings */
ربما ترى دول مجلس التعاون الخليجي التشخيص Pragmas?بدلا من ذلك في هذه الحالة يمكن استخدام مزيج من الخيارات أن -Wall
تمكن باستثناء -Wunknown-pragmas
.
شكرا لك لهذه المعلومة.في حالتي أنا أعمل مع Qt مينغو.أحتاج أن العلم وسيلة أخرى في بلدي .الملف PRO:
QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas
أعلم أن السؤال هو عن دول مجلس التعاون الخليجي ، ولكن للناس الذين يريدون القيام بذلك كما portably ممكن:
معظم المجمعين التي يمكن أن تنبعث من هذا التحذير يكون وسيلة إلى تعطيل التحذير من أي سطر الأوامر (استثناء:PGI) أو رمز (استثناء:DMC):
- مجلس التعاون الخليجي:
-Wno-unknown-pragmas
/#pragma GCC diagnostic ignored "-Wunknown-pragmas"
- رنة:
-Wno-unknown-pragmas
/#pragma clang diagnostic ignored "-Wunknown-pragmas"
- Intel C/C++ Compiler:
-diag-disable 161
/#pragma warning(disable:161)
- PGI:
#pragma diag_suppress 1675
- MSVC:
-wd4068
/#pragma warning(disable:4068)
- TI:
--diag_suppress,-pds=163
/#pragma diag_suppress 163
- IAR C/C++ Compiler:
--diag_suppress Pe161
/#pragma diag_suppress=Pe161
- الرقمية المريخ C/C++ Compiler:
-w17
يمكنك الجمع بين أكثر من هذا في ماكرو واحد في التعليمات البرمجية ، وهو ما فعلته من أجل HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
ماكرو في هيدلي:
#if HEDLEY_HAS_WARNING("-Wunknown-pragmas")
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_INTEL_VERSION_CHECK(16,0,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
#elif HEDLEY_PGI_VERSION_CHECK(17,10,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
#elif HEDLEY_GNUC_VERSION_CHECK(4,3,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_MSVC_VERSION_CHECK(15,0,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
#elif HEDLEY_TI_VERSION_CHECK(8,0,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
#elif HEDLEY_IAR_VERSION_CHECK(8,0,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
#else
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
#endif
علما أن هيدلي قد يكون معلومات أكثر اكتمالا من هذا الجواب منذ ربما تنسى تحديث هذا الجواب ، حتى إذا كنت لا تريد استخدام هيدلي (إنه واحد من المجال العام رأس C/C++ يمكنك بسهولة قطرة في المشروع) قد ترغب في استخدام هيدلي كدليل بدلا من أن المعلومات الواردة أعلاه.
إصدار الشيكات ربما تكون مفرطة في التشاؤم ، لكن في بعض الأحيان من الصعب الحصول على معلومات جيدة عن الإصدارات القديمة من الملكية المجمعين ، و أفضل أن تكون آمنة من آسف.مرة أخرى ، هيدلي المعلومات قد يكون أفضل.
العديد من المجمعين يمكن أيضا دفع/البوب تحذيرات على كومة, حتى تتمكن من دفع ، ثم تعطيلها من قبل بما في ذلك رمز لا تتحكم بها ، ثم البوب حتى الخاص بك رمز سوف لا تزال تثير التحذير في السؤال (حتى يمكنك تنظيفه).هناك وحدات الماكرو في هيدلي أيضا: HEDLEY_DIAGNOSTIC_PUSH
/ HEDLEY_DIAGNOSTIC_POP
.