C тилинде NULL - бул символдук туруктуу, ал дайыма эсинде жок чекитти көрсөтөт. Көптөгөн программисттер аны 0ге барабар деп эсептешсе да, бул жөнөкөйлөтүү, кийинчерээк сизди чалындырат. Көрсөткүчтөрүңүздү NULLден түз текшерип, башка контекстте 0 колдонуу эң жакшы. Бул кодуңузду таза жана түшүнүүгө оңой сактайт, анткени сиз NULL көргөн сайын көрсөткүчтөр менен иштеп жатканыңызды билесиз.
Кадамдар
2 ичинен 1 -бөлүк: Бош текшерүүнү аткаруу
Кадам 1. Стандарттык текшерүү кодун колдонуңуз
Төмөндө нөл текшерүүнү жазуунун эң ачык жолу. Биз колдонобуз ptr бул макалада сиз текшерип жаткан көрсөткүчтүн аты катары.
-
эгер (ptr == NULL)
{
// код эгер көрсөткүч NULL болсо
} башка {
// код NULL болбосо
}
Кадам 2. Кандайдыр бир маанини текшериңиз, бирок NULL
Кээде анын ордуна теңсиздикти текшерүү ыңгайлуу болот. Бул жерде сюрприз жок:
-
if (ptr! = NULL) {
// код NULL болбосо
}
Кадам 3. Каталарды болтурбоо үчүн биринчи NULL жазыңыз (милдеттүү эмес)
PTR == NULL методунун негизги кемчилиги - бул көрсөткүчкө NULL маанисин ыйгарып, кокустан анын ордуна ptr = 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 текшерүүнү колдонгон malloc функциясынын мисалы (эгер (ptr)) жарактуу мааниге ээ болгон көрсөткүчтөрдү гана иштетүүнү камсыз кылуу үчүн:
-
int * ptr = malloc (N * sizeof (int));
эгер (ptr) {
int i;
үчүн (i = 0; i <N; ++ i)
ptr = i;
}
Кадам 3. NULL 0 экенин түшүнүңүз, бирок тактык үчүн көрсөткүчтөр менен иштөөдө дайыма 0 ордуна NULL колдонушуңуз керек
Тарыхта, C NULL санын 0 (башкача айтканда 0x00) катары көрсөткөн. Бүгүнкү күндө ал бир аз татаалыраак болуп, иштөө тутумуна жараша өзгөрүшү мүмкүн. Сиз адатта NULL колдонуп текшере аласыз ptr == 0, бирок бул көйгөйдү жаратышы мүмкүн болгон бурчтук учурлар бар. Балким, андан да маанилүүсү, NULL колдонуу сиздин кодду окуган башка адамдар үчүн көрсөткүчтөр менен иштеп жатканыңызды айкын кылат.