Në C, NULL është një konstante simbolike që tregon gjithmonë për një pikë inekzistente në kujtesë. Edhe pse shumë programues e trajtojnë atë si të barabartë me 0, ky është një thjeshtim që mund t’ju shqetësojë më vonë. Bestshtë më mirë të kontrolloni direkt treguesit tuaj kundër NULL dhe të përdorni 0 në kontekste të tjera. Kjo e mban kodin tuaj të pastër dhe të lehtë për t'u kuptuar, pasi do të dini që po punoni me tregues sa herë që shihni NULL.
Hapa
Pjesa 1 nga 2: Kryerja e një Kontrolli Null
Hapi 1. Përdorni kodin standard të kontrollit null
Më poshtë është mënyra më e qartë për të shkruar një kontroll null. Ne do të përdorim ptr në këtë artikull si emri i treguesit që po kontrolloni.
-
nëse (ptr == NULL)
{
// kodi nëse treguesi është NULL
} tjetër {
// kodi nëse jo NULL
}
Hapi 2. Testoni për çdo vlerë përveç NULL
Ndonjëherë është më i përshtatshëm për të provuar pabarazinë në vend. Këtu nuk ka surpriza:
-
nëse (ptr! = NULL) {
// kodi nëse jo NULL
}
Hapi 3. Shkruani NULL së pari për të shmangur gabimet (opsionale)
Disavantazhi kryesor i metodës PTR == NULL është shansi që ju rastësisht të shtypni ptr = NULL në vend, duke i caktuar vlerën NULL atij treguesi. Kjo mund të shkaktojë një dhimbje koke të madhe. Meqenëse testimi për (jo) barazinë i trajton operandët në mënyrë simetrike, mund të merrni saktësisht të njëjtin rezultat duke shkruar nëse (NULL == ptr) në vend të kësaj. Kjo është më rezistente ndaj gabimeve shtypi, pasi një NULL = ptr aksidentale krijon një gabim të thjeshtë të përpilimit.
Kjo duket pak e vështirë për disa programues, por është krejtësisht e vlefshme. Cila qasje përdorni vetëm varet nga preferencat personale, dhe sa i mirë është përpiluesi juaj në zbulimin e gabimit if (ptr = NULL)
Hapi 4. Provoni nëse ndryshorja është e vërtetë
Një e thjeshtë nëse (ptr) teston nëse ptr është E VUERTET. Do të kthehet FALSE nëse ptr është NULL, ose nëse ptr është 0. Dallimi nuk ka rëndësi në shumë raste, por kini parasysh se këto nuk janë identike në të gjitha arkitekturat.
E kundërta e kësaj është nëse (! ptr), e cila do të kthehet TRUE nëse ptr është FALSE.
Pjesa 2 nga 2: Shmangia e Gabimeve
Hapi 1. Vendosni një tregues para se të kontrolloni për NULL
Një gabim i zakonshëm është të supozosh se një tregues i krijuar rishtas ka një vlerë NULL. Kjo nuk eshte e vertete. Një tregues i pacaktuar ende tregon një adresë memorie, jo vetëm atë që keni specifikuar. Practiceshtë praktikë e zakonshme të vendosni tregues të sapo krijuar ose të sapo liruar në NULL për t'u siguruar që nuk e përdorni këtë adresë të padobishme rastësisht.
-
Shmangni këtë gabim:
char *ptr;
nëse (ptr == NULL)
{
// Kjo do të kthejë FALSE. Treguesit i është caktuar një vlerë e vlefshme.
}
-
Në vend të kësaj shkruani:
char *ptr = NULL; // Kjo i cakton treguesin NULL
nëse (ptr == NULL)
{
// Kjo do të kthehet TRUE nëse treguesi nuk është caktuar përsëri.
}
Hapi 2. Kushtojini vëmendje funksioneve që mund të kthejnë NULL
Nëse një funksion mund të kthejë NULL, mendoni nëse kjo është një mundësi dhe nëse kjo do të shkaktonte probleme më vonë në kodin tuaj. Këtu është një shembull i funksionit malloc duke përdorur kontrollin null (nëse (ptr)) për të siguruar që trajton vetëm tregues me vlera të vlefshme:
-
int * ptr = malloc (N * sizeof (int));
nëse (ptr) {
int i;
për (i = 0; i <N; ++ i)
ptr = i;
}
Hapi 3. Kuptoni që NULL është 0, por gjithmonë duhet të përdorni NULL në vend të 0 kur punoni me tregues për qartësi
Historikisht, C përfaqësonte NULL si numrin 0 (domethënë 0x00). Në ditët e sotme mund të bëhet pak më e komplikuar dhe ndryshon sipas sistemit operativ. Zakonisht mund të kontrolloni për NULL duke përdorur ptr == 0, por ka raste qoshe ku kjo mund të shkaktojë një problem. Ndoshta më e rëndësishmja, përdorimi i NULL e bën të qartë se po punoni me tregues për njerëzit e tjerë që lexojnë kodin tuaj.