هل من الممكن طباعة المعالج متغير في C ؟
-
05-07-2019 - |
سؤال
هل من الممكن طباعة إلى stderr قيمة متغير في المعالج ج?على سبيل المثال ، ما لدي الآن هو:
#define PP_VAR (10)
#if (PP_VAR > 10)
#warning PP_VAR is greater than 10
#endif
ولكن ما أود القيام به هو:
#define PP_VAR (10)
#if (PP_VAR > 10)
#warning PP_VAR=%PP_VAR%
#endif
هو شيء من هذا القبيل ممكن في ج?
المحلول
يمكنك طباعة قيمة المعالج متغير تحت visual studio.التالية بطباعة قيمة _MSC_VER:
#define STRING2(x) #x
#define STRING(x) STRING2(x)
#pragma message(STRING(_MSC_VER))
غير متأكد من كيفية القياسية هذا على الرغم من.
نصائح أخرى
هذا يعمل مع دول مجلس التعاون الخليجي 4.4.3:
#define STRING2(x) #x
#define STRING(x) STRING2(x)
#pragma message "LIBMEMCACHED_VERSION_HEX = " STRING(LIBMEMCACHED_VERSION_HEX)
ينتج:
src/_pylibmcmodule.c:1843: note: #pragma message: LIBMEMCACHED_VERSION_HEX = 0x01000017
العديد من ج المجمعين الدعم #warning
(ولكن ليس يحددها ج القياسي).
بيد أن دول مجلس التعاون الخليجي على الأقل لا تفعل ما قبل المعالجة على البيانات التالية ، مما يعني أنه من الصعب أن نرى قيمة متغير.
#define PP_VAR 123
#warning "Value of PP_VAR = " PP_VAR
#warning "Value of PP_VAR = " #PP_VAR
#warning "Value of PP_VAR = " ##PP_VAR
دول مجلس التعاون الخليجي تنتج:
x.c:2:2: warning: #warning "Value of PP_VAR = " PP_VAR
x.c:3:2: warning: #warning "Value of PP_VAR = " #PP_VAR
x.c:4:2: warning: #warning "Value of PP_VAR = " ##PP_VAR
استخدام المعالج رمزي-لصق المشغل:##TOKEN_NAME
كما لوحظ سابقا, توجيهات المعالج الذي تستخدمه غير القياسية ، لذلك YMMV.
حسنا, ما تقومون به هو في الواقع غير القياسية.أولا "#تحذير" أو "#يحذرون من" التوجيه غير القياسية.ثانيا, عند استخدام المعالج ، خط يجب أن تبدأ مع رمز الجنيه ، دون أي مسافات:
#ifdef BLAH1 # define BLAH2 // OK, because pound is at the very left. #endif #ifdef BLAH3 #define BLAH4 // Works on many compilers, but is non-standard. #endif
منذ كنت بالفعل باستخدام غير القياسية التمديد ، سوف تحتاج للبحث عن وثائق خاصة المعالج/المترجم الذي تستخدمه لمعرفة ماذا يقول عن "#تحذير".