سؤال

هل من الممكن طباعة إلى 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

منذ كنت بالفعل باستخدام غير القياسية التمديد ، سوف تحتاج للبحث عن وثائق خاصة المعالج/المترجم الذي تستخدمه لمعرفة ماذا يقول عن "#تحذير".

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