C хэл дээр NULL нь санах ойд байхгүй цэгийг үргэлж зааж өгдөг бэлгэдлийн тогтмол юм. Хэдийгээр олон програмистууд үүнийг 0 -тэй тэнцүү гэж үздэг боловч энэ нь таныг дараа нь дуудаж болох хялбарчлал юм. NULL -ийн эсрэг заагчийг шууд шалгаж, бусад контекстэд 0 -ийг ашиглах нь дээр. Энэ нь NULL -ийг харах бүртээ заагчтай ажиллаж байгаагаа мэдэх тул таны кодыг цэвэр, ойлгомжтой байлгадаг.
Алхам
2 -ийн 1 -р хэсэг: Null Check хийх
Алхам 1. Стандарт null шалгах кодыг ашиглана уу
Дараах нь тэг чек бичих хамгийн ойлгомжтой арга юм. Бид ашиглах болно ptr Энэ нийтлэлд таны шалгаж буй заагчийн нэр болно.
-
хэрэв (ptr == NULL)
{
// заагч нь NULL байвал код
} өөр {
// код NULL биш бол
}
Алхам 2. NULL -ээс бусад утгыг шалгана уу
Заримдаа тэгш бус байдлыг шалгах нь илүү тохиромжтой байдаг. Энд гайхах зүйл алга:
-
if (ptr! = NULL) {
// код NULL биш бол
}
Алхам 3. Алдаа гаргахгүйн тулд эхлээд NULL бичнэ үү (заавал биш)
PTR == NULL аргын гол сул тал бол та санамсаргүйгээр ptr = NULL гэж бичиж, заагч руу NULL утгыг өгөх боломж юм. Энэ нь том толгой өвдөхөд хүргэдэг. Тэгш байдлыг шалгах нь операндуудыг тэгш хэмтэй авч үздэг тул та бичээд яг ижил үр дүнд хүрч чадна. хэрэв (NULL == ptr) оронд нь Санамсаргүй NULL = ptr нь энгийн хөрвүүлэх алдаа үүсгэдэг тул энэ нь бичгийн алдаанд илүү тэсвэртэй байдаг.
Зарим програмистуудад энэ нь жаахан эвгүй санагддаг, гэхдээ энэ нь үнэхээр хүчин төгөлдөр юм. Таны ашиглаж буй арга барил нь хувийн сонголтоос хамаардаг бөгөөд хөрвүүлэгчийн if (ptr = NULL) алдааг хэр сайн илрүүлж чаддагт хамаарна
Алхам 4. Хувьсагч үнэн эсэхийг шалгах
Энгийн хэрэв (ptr) ptr ҮНЭН эсэхийг шалгадаг. Хэрэв ptr NULL, эсвэл ptr 0 байвал FALSE буцаана. Ялгаа нь олон тохиолдолд хамаагүй, гэхдээ эдгээр нь бүх архитектурын хувьд ижил биш гэдгийг анхаарна уу.
Үүний эсрэг тал нь юм хэрэв (! ptr), хэрэв ptr ХУДАЛ байвал ҮНЭН буцаана.
2 -р хэсгийн 2: Алдаа гаргахгүй байх
Алхам 1. NULL шалгахын өмнө заагчийг тохируулна уу
Нэг нийтлэг алдаа бол шинээр үүсгэсэн заагчийг NULL утгатай гэж үзэх явдал юм. Энэ нь үнэн биш юм. Төлөвлөөгүй заагч нь санах ойн хаягийг зааж өгсөн хэвээр байгаа бөгөөд таны зааж өгсөн хаяг биш юм. Энэхүү ашиггүй хаягийг санамсаргүйгээр ашиглахгүй байхын тулд шинээр үүсгэсэн эсвэл шинээр чөлөөлөгдсөн заагчийг NULL болгож тохируулах нь ердийн практик юм.
-
Энэ алдаанаас зайлсхийх хэрэгтэй:
char *ptr;
хэрэв (ptr == NULL)
{
// Энэ нь ХУДАЛ буцах болно. Заагчийг зөв утга оноосон байна.
}
-
Үүний оронд бичнэ үү:
char *ptr = NULL; // Энэ нь заагчийг NULL гэж оноодог
хэрэв (ptr == NULL)
{
// Хэрэв заагчийг дахин оноож өгөөгүй бол энэ нь ҮНЭН болно.
}
Алхам 2. NULL буцаах боломжтой функцүүдэд анхаарлаа хандуулаарай
Хэрэв функц NULL буцаах боломжтой бол энэ нь боломж байгаа эсэх, энэ нь таны кодын дараа асуудал үүсгэж болзошгүй эсэхийг бодож үзээрэй. Null check ашиглан malloc функцын жишээг энд үзүүлэв (хэрэв (ptr)) нь зөвхөн хүчин төгөлдөр утгатай заагчтай ажиллахыг баталгаажуулахын тулд:
-
int * ptr = malloc (N * sizeof (int));
хэрэв (ptr) {
int i;
for (i = 0; i <N; ++ i)
ptr = i;
}
Алхам 3. NULL бол 0 гэдгийг ойлгоорой, гэхдээ ойлгомжтой байхын тулд заагчтай ажиллахдаа үргэлж NULL -ийг 0 -ийн оронд ашиглах ёстой
Түүхийн хувьд C нь NULL -ийг 0 гэсэн тоогоор илэрхийлсэн (өөрөөр хэлбэл 0x00). Өнөө үед энэ нь арай илүү төвөгтэй болж магадгүй бөгөөд үйлдлийн системээс хамаарч өөр өөр байдаг. Та ихэвчлэн NULL ашиглан шалгаж болно ptr == 0, гэхдээ энэ нь асуудал үүсгэж болзошгүй булангийн тохиолдлууд байдаг. NULL -ийг ашиглах нь таны кодыг уншиж буй бусад хүмүүст зориулсан заагчтай ажиллаж байгаа нь илүү чухал байж магадгүй юм.