في C ، NULL هو ثابت رمزي يشير دائمًا إلى نقطة غير موجودة في الذاكرة. على الرغم من أن العديد من المبرمجين يعاملونها على أنها تساوي 0 ، إلا أن هذا تبسيط يمكن أن يؤدي بك لاحقًا. من الأفضل التحقق من المؤشرات مقابل NULL مباشرةً ، واستخدام 0 في سياقات أخرى. هذا يحافظ على الكود الخاص بك نظيفًا وسهل الفهم ، لأنك ستعرف أنك تعمل باستخدام المؤشرات في كل مرة ترى فيها NULL.
خطوات
جزء 1 من 2: إجراء فحص فارغ
الخطوة 1. استخدم رمز التحقق القياسي الفارغ
فيما يلي الطريقة الأكثر وضوحًا لكتابة شيك فارغ. سنستخدم ptr في هذه المقالة كاسم المؤشر الذي تقوم بفحصه.
-
إذا (ptr == NULL)
{
// كود إذا كان المؤشر فارغًا
} آخر {
// كود إذا لم يكن NULL
}
الخطوة الثانية. اختبر أي قيمة ما عدا NULL
في بعض الأحيان يكون من الأنسب اختبار عدم المساواة بدلاً من ذلك. لا مفاجآت هنا:
-
إذا (ptr! = NULL) {
// كود إذا لم يكن NULL
}
الخطوة 3. اكتب NULL أولاً لتجنب الأخطاء (اختياري)
العيب الرئيسي لطريقة PTR == NULL هو احتمال أن تكتب عن طريق الخطأ ptr = NULL بدلاً من ذلك ، مع تعيين قيمة NULL لهذا المؤشر. هذا يمكن أن يسبب صداع كبير. نظرًا لأن اختبار المساواة (in) يعامل المعاملات بشكل متماثل ، يمكنك الحصول على نفس النتيجة تمامًا عن طريق الكتابة إذا (NULL == ptr) في حين أن. هذا أكثر مقاومة للأخطاء المطبعية ، حيث أن الخطأ NULL العرضي = ptr يخلق خطأ ترجمة بسيطًا.
يبدو هذا محرجًا بعض الشيء لبعض المبرمجين ، لكنه صالح تمامًا. يعتمد الأسلوب الذي تستخدمه فقط على التفضيل الشخصي ، ومدى كفاءة المترجم في اكتشاف خطأ if (ptr = NULL)
الخطوة 4. اختبر ما إذا كان المتغير صحيحًا
بسيط إذا (ptr) يختبر ما إذا كان ptr هو TRUE. ستُرجع FALSE إذا كانت ptr هي NULL ، أو إذا كانت ptr تساوي 0. لا يهم التمييز في كثير من الحالات ، ولكن يجب أن تدرك أن هذه ليست متطابقة في جميع البنى.
عكس هذا إذا (! ptr) ، والتي ستعيد TRUE إذا كان ptr خطأ.
جزء 2 من 2: تجنب الأخطاء
الخطوة 1. قم بتعيين مؤشر قبل التحقق من وجود NULL
أحد الأخطاء الشائعة هو افتراض أن المؤشر الذي تم إنشاؤه حديثًا له قيمة فارغة. هذا ليس صحيحا. لا يزال المؤشر غير المعين يشير إلى عنوان الذاكرة ، وليس المؤشر الذي حددته. من الشائع تعيين المؤشرات المنشأة حديثًا أو المحررة حديثًا على NULL للتأكد من أنك لا تستخدم هذا العنوان غير المفيد عن طريق الصدفة.
-
تجنب هذا الخطأ:
شار * ptr ؛
إذا (ptr == NULL)
{
// هذا سيعيد FALSE. تم تعيين قيمة صالحة للمؤشر.
}
-
بدلا من ذلك اكتب:
حرف * ptr = NULL ؛ // هذا يعين المؤشر إلى NULL
إذا (ptr == NULL)
{
// سيؤدي هذا إلى إرجاع TRUE إذا لم يتم إعادة تعيين المؤشر.
}
الخطوة 2. انتبه للوظائف التي يمكن أن ترجع NULL
إذا كان بإمكان الدالة إرجاع NULL ، فكر فيما إذا كان هذا احتمالًا ، وما إذا كان ذلك سيؤدي إلى حدوث مشكلات لاحقًا في التعليمات البرمجية الخاصة بك. فيما يلي مثال على دالة malloc باستخدام الاختيار الفارغ (إذا (ptr)) للتأكد من أنه يتعامل مع المؤشرات ذات القيم الصالحة فقط:
-
int * ptr = malloc (N * sizeof (int)) ؛
إذا (ptr) {
إنت أنا
لـ (i = 0 ؛ i <N ؛ ++ i)
ptr = i ؛
}
الخطوة الثالثة. افهم أن القيمة NULL تساوي 0 ولكن يجب عليك دائمًا استخدام NULL بدلاً من 0 عند التعامل مع المؤشرات من أجل الوضوح
تاريخيًا ، كان C يمثل NULL كرقم 0 (أي ، 0x00). في الوقت الحاضر يمكن أن يصبح الأمر أكثر تعقيدًا قليلاً ، ويختلف حسب نظام التشغيل. يمكنك عادة التحقق من استخدام NULL ptr == 0 ، ولكن هناك حالات زاوية حيث يمكن أن يتسبب ذلك في حدوث مشكلة. ربما الأهم من ذلك ، أن استخدام NULL يوضح أنك تعمل مع مؤشرات لأشخاص آخرين يقرؤون التعليمات البرمجية الخاصة بك.