În C, NULL este o constantă simbolică care indică întotdeauna un punct inexistent din memorie. Deși mulți programatori o consideră egală cu 0, aceasta este o simplificare care vă poate împiedica mai târziu. Cel mai bine este să vă verificați indicii împotriva NULL direct și să utilizați 0 în alte contexte. Acest lucru vă păstrează codul curat și ușor de înțeles, deoarece veți ști că lucrați cu indicatori de fiecare dată când vedeți NULL.
Pași
Partea 1 din 2: Efectuarea unui control nul
Pasul 1. Folosiți codul de verificare standard nul
Următorul este cel mai evident mod de a scrie un cec nul. Vom folosi ptr în acest articol ca numele indicatorului pe care îl verificați.
-
if (ptr == NULL)
{
// codează dacă indicatorul este NULL
} altceva {
// cod dacă nu NULL
}
Pasul 2. Testați orice valoare în afară de NULL
Uneori este mai convenabil să testați inegalitatea în schimb. Fără surprize aici:
-
if (ptr! = NULL) {
// cod dacă nu NULL
}
Pasul 3. Scrieți mai întâi NULL pentru a evita erorile (opțional)
Principalul dezavantaj al metodei PTR == NULL este șansa de a tasta accidental ptr = NULL, atribuind valoarea NULL acelui pointer. Acest lucru poate provoca o durere de cap majoră. Deoarece testarea (in) egalității tratează operanzii simetric, puteți obține exact același rezultat scriind if (NULL == ptr) in schimb. Acest lucru este mai rezistent la greșeli, deoarece un NULL = ptr accidental creează o eroare simplă de compilare.
Acest lucru pare puțin ciudat pentru unii programatori, dar este perfect valabil. Ce abordare utilizați depinde doar de preferințele personale și de cât de bun este compilatorul dvs. la detectarea erorii if (ptr = NULL)
Pasul 4. Testați dacă variabila este adevărată
Un simplu dacă (ptr) testează dacă ptr este ADEVĂRAT. Va reveni FALS dacă ptr este NUL sau dacă ptr este 0. Distincția nu contează în multe cazuri, dar rețineți că acestea nu sunt identice în toate arhitecturile.
Reversul acestui lucru este dacă (! ptr), care va reveni ADEVĂRAT dacă ptr este FALS.
Partea 2 din 2: Evitarea greșelilor
Pasul 1. Setați un indicator înainte de a verifica NULL
O greșeală obișnuită este să presupunem că un indicator nou creat are o valoare NULL. Nu este adevarat. Un indicator neatribuit încă indică o adresă de memorie, doar una care nu a fost specificată de dvs. Este o practică obișnuită să setați indicatorii nou creați sau eliberați la NULL pentru a vă asigura că nu utilizați accidental această adresă inutilă.
-
Evitați această greșeală:
char * ptr;
if (ptr == NULL)
{
// Acest lucru va reveni FALS. Pointerului i s-a atribuit o valoare validă.
}
-
În schimb, scrieți:
char * ptr = NULL; // Aceasta atribuie indicatorul la NULL
if (ptr == NULL)
{
// Aceasta va reveni la TRUE dacă indicatorul nu a fost realocat.
}
Pasul 2. Acordați atenție funcțiilor care ar putea reveni la NULL
Dacă o funcție poate reveni la NULL, gândiți-vă dacă aceasta este o posibilitate și dacă aceasta ar cauza probleme mai târziu în codul dvs. Iată un exemplu al funcției malloc folosind verificarea nulă (dacă (ptr)) pentru a se asigura că gestionează numai indicii cu valori valide:
-
int * ptr = malloc (N * sizeof (int));
if (ptr) {
int i;
pentru (i = 0; i <N; ++ i)
ptr = i;
}
Pasul 3. Înțelegeți că NULL este 0, dar ar trebui să utilizați întotdeauna NULL în loc de 0 atunci când lucrați cu indicatori pentru claritate
Din punct de vedere istoric, C a reprezentat NULL ca numărul 0 (adică 0x00). În zilele noastre poate deveni puțin mai complicat și variază în funcție de sistemul de operare. De obicei, puteți verifica NULL folosind ptr == 0, dar există cazuri de colț în care acest lucru poate cauza o problemă. Poate mai important, utilizarea NULL face evident faptul că lucrați cu indicii pentru alte persoane care vă citesc codul.