خطأ: يجب أن تكون أسماء الكلي معرفات باستخدام #IFDEF 0
-
06-07-2019 - |
سؤال
ولدي شفرة المصدر من تطبيق مكتوب في C ++، وأريد فقط أن أعلق شيء باستخدام:
#ifdef 0
...
#endif
وأحصل على هذا الخطأ
<اقتباس فقرة>خطأ: يجب أن تكون أسماء الكلي معرفات
اقتباس فقرة>لماذا يحدث هذا؟
المحلول
ويتم استخدام التوجيه #IFDEF للتحقق <م> إذا تم تعريف رمز المعالج م> المعيار (C11 6.4.2 Identifiers
) ولايات معرفات يجب أن لا تبدأ برقم:.
identifier:
identifier-nondigit
identifier identifier-nondigit
identifier digit
identifier-nondigit:
nondigit
universal-character-name
other implementation-defined characters>
nondigit: one of
_ a b c d e f g h i j k l m
n o p q r s t u v w x y z
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
digit: one of
0 1 2 3 4 5 6 7 8 9
والنموذج الصحيح لاستخدام قبل المعالج لحجب متاحة:
#if 0
: : :
#endif
ويمكنك أيضا استخدام:
#ifdef NO_CHANCE_THAT_THIS_SYMBOL_WILL_EVER_EXIST
: : :
#endif
ولكن عليك أن تكون واثقا أن الرموز و<م> لا م> يتم تعيين بشكل غير مقصود من قبل رمز آخر من بنفسك. وبعبارة أخرى، لا تستخدم شيء من هذا القبيل NOTUSED
أو DONOTCOMPILE
التي قد تستخدم الآخرين أيضا. أن تكون آمنة، ينبغي تفضيل الخيار #if
.
نصائح أخرى
استخدم ما يلي لتقييم تعبير (ثابت 0 بتقييم إلى false).
#if 0
...
#endif
ويمكن أن يحدث هذا الخطأ أيضا إذا كنت لا تتبع القواعد ماركو
ومثل
#define 1K 1024 // Macro rules must be identifiers error occurs
والسبب: ماكرو يجب أن تبدأ بحرف وليس عددا
والتغيير إلى
#define ONE_KILOBYTE 1024 // This resolves
#ifdef 0
...
#endif
و#IFDEF نتوقع ماكرو بدلا من التعبير عند استخدام ثابت أو التعبير
#if 0
...
#endif
أو
#if !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif
وإذا تم استخدام #IFDEF التقارير التي هذا الخطأ
#ifdef !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif
وأين #IFDEF نتوقع ماكرو بدلا من expresssion على الماكرو
لاحظ أنه يمكنك أيضا ضرب هذا الخطأ إذا كتبت عن طريق الخطأ:
#define <stdio.h>
... بدلا من ...
#include <stdio.>