Kuidas kontrollida nulli C-s

C-s on NULL sümboolne konstant, mis osutab alati mälus olematule punktile. Kuigi paljud programmeerijad peavad seda võrdseks 0-ga, on see lihtsustus, mis võib teid hiljem komistada. Parim on kontrollida viiteid otse NULL-i vastu ja kasutada muus kontekstis väärtust 0. See hoiab teie koodi puhtana ja hõlpsasti arusaadavana, kuna teate, et töötate osutitega iga kord, kui näete NULL.

1
Kasutage standardset nullkontrolli koodi. Järgmine on kõige ilmsem viis nullkontrolli kirjutamiseks. Kasutame selles artiklis kontrollitava kursori nimena ptr.if(ptr == NULL){   // kood, kui kursor on NULL} muidu {   // kood, kui mitte NULL}

2
Testige mis tahes väärtust peale NULL. Mõnikord on mugavam hoopis ebavõrdsust testida. Siin pole üllatusi:if (ptr != NULL) {    // kood, kui mitte NULL}

3
Vigade vältimiseks kirjutage esmalt NULL (valikuline). Meetodi PTR == NULL peamine puudus on võimalus, et sisestate kogemata ptr = NULL, määrates sellele osutile väärtuse NULL. See võib põhjustada tugevat peavalu. Kuna (eba)võrdsuse testimine käsitleb operande sümmeetriliselt, saad täpselt sama tulemuse, kirjutades selle asemele if (NULL == ptr). See on kirjavigade suhtes vastupidavam, kuna juhuslik NULL = ptr tekitab lihtsa kompileerimisvea. Mõnele programmeerijale tundub see pisut ebamugav, kuid see on täiesti kehtiv. See, millist lähenemisviisi te kasutate, sõltub ainult isiklikest eelistustest ja sellest, kui hea on teie kompilaatoril if (ptr = NULL) vea tuvastamine.

4
Testige, kas muutuja on tõene. Lihtne if (ptr) testib, kas ptr on TRUE. See tagastab väärtuse VÄÄR, kui ptr on NULL või kui ptr on 0. Paljudel juhtudel pole eristamine oluline, kuid pidage meeles, et need ei ole kõigis arhitektuurides identsed. Selle vastupidine on kui (!ptr), mis tagastab TRUE, kui ptr on FALSE.

5
Seadke kursor enne NULL-i kontrollimist. Üks levinud viga on eeldada, et vastloodud osutil on NULL väärtus. See ei ole tõsi. Määramata kursor osutab ikkagi mäluaadressile, mitte teie määratud aadressile. Levinud tava on seada äsja loodud või äsja vabastatud osutid väärtusele NULL, et veenduda, et te ei kasuta seda kasutut aadressi kogemata. Vältige seda viga:char *ptr;if(ptr == NULL){//See tagastab väärtuse FALSE. Kursorile on määratud kehtiv väärtus.}Selle asemel kirjuta:char *ptr = NULL; //See määrab kursori väärtusele NULLif(ptr == NULL){//See tagastab väärtuse TRUE, kui kursorit pole ümber määratud.}

6
Pöörake tähelepanu funktsioonidele, mis võivad tagastada NULL. Kui funktsioon võib tagastada NULL-i, mõelge, kas see on võimalik ja kas see võib hiljem teie koodis probleeme tekitada. Siin on näide malloc funktsioonist, mis kasutab nullkontrolli (if (ptr)), et tagada, et see käsitleb ainult kehtivate väärtustega osuteid:int *ptr = malloc(N * sizeof(int));if (ptr) {   int i;   for (i = 0; i < N; ++i)      ptr[i] = i;} 7 Mõistke, et NULL on 0, kuid selguse huvides peaksite osutitega töötades alati kasutama NULL-i 0 asemel. Ajalooliselt esindas C NULL-i arvuna 0 (st 0x00). Tänapäeval võib see muutuda pisut keerulisemaks ja varieerub sõltuvalt operatsioonisüsteemist. Tavaliselt saate NULL-i kontrollida kasutades ptr == 0, kuid on nurgajuhtumeid, kus see võib põhjustada probleeme. Võib-olla veelgi olulisem on see, et NULL-i kasutamine muudab selgeks, et töötate teiste inimeste jaoks, kes teie koodi loevad, viidatega.