In C is NULL een symbolische constante die altijd wijst naar een niet-bestaand punt in het geheugen. Hoewel veel programmeurs het als gelijk aan 0 beschouwen, is dit een vereenvoudiging die u later kan laten struikelen. Het is het beste om uw pointers rechtstreeks tegen NULL te controleren en 0 in andere contexten te gebruiken. Dit houdt je code schoon en gemakkelijk te begrijpen, omdat je weet dat je met pointers werkt elke keer dat je NULL ziet.
Stappen
Deel 1 van 2: Een nulcontrole uitvoeren
Stap 1. Gebruik de standaard nulcontrolecode
Het volgende is de meest voor de hand liggende manier om een nulcontrole uit te schrijven. We gebruiken ptr in dit artikel als de naam van de aanwijzer die u controleert.
-
if(ptr == NULL)
{
// code als aanwijzer NULL is
} anders {
// code indien niet NULL
}
Stap 2. Test op elke waarde behalve NULL
Soms is het handiger om in plaats daarvan te testen op ongelijkheid. Geen verrassingen hier:
-
if (ptr != NULL) {
// code indien niet NULL
}
Stap 3. Schrijf eerst de NULL om fouten te voorkomen (optioneel)
Het grootste nadeel van de PTR == NULL-methode is de kans dat u in plaats daarvan per ongeluk ptr = NULL typt en de NULL-waarde aan die aanwijzer toewijst. Dit kan flinke hoofdpijn veroorzaken. Aangezien testen op (on)gelijkheid de operanden symmetrisch behandelt, kun je precies hetzelfde resultaat krijgen door te schrijven als (NULL == ptr) in plaats daarvan. Dit is beter bestand tegen typfouten, aangezien een onbedoelde NULL = ptr een eenvoudige compileerfout creëert.
Dit ziet er een beetje onhandig uit voor sommige programmeurs, maar het is volkomen geldig. Welke benadering u gebruikt, hangt af van uw persoonlijke voorkeur en hoe goed uw compiler is in het detecteren van de if (ptr = NULL) -fout
Stap 4. Test of de variabele waar is
Een eenvoudige als (ptr) test of ptr WAAR is. Het zal FALSE teruggeven als ptr NULL is, of als ptr 0 is. Het onderscheid maakt in veel gevallen niet uit, maar houd er rekening mee dat deze niet in alle architecturen identiek zijn.
Het omgekeerde hiervan is als (!ptr), die TRUE retourneert als ptr FALSE is.
Deel 2 van 2: Fouten vermijden
Stap 1. Stel een aanwijzer in voordat u op NULL controleert
Een veelgemaakte fout is om aan te nemen dat een nieuw gemaakte aanwijzer een NULL-waarde heeft. Dit is niet waar. Een niet-toegewezen aanwijzer wijst nog steeds naar een geheugenadres, alleen niet naar een adres dat u hebt opgegeven. Het is gebruikelijk om nieuw gemaakte of vrijgekomen pointers op NULL te zetten om ervoor te zorgen dat u dit nutteloze adres niet per ongeluk gebruikt.
-
Vermijd deze fout:
teken *ptr;
if(ptr == NULL)
{
// Dit zal FALSE retourneren. De aanwijzer heeft een geldige waarde gekregen.
}
-
Schrijf in plaats daarvan:
char *ptr = NULL; // Dit wijst de aanwijzer toe aan NULL
if(ptr == NULL)
{
// Dit zal TRUE retourneren als de aanwijzer niet opnieuw is toegewezen.
}
Stap 2. Besteed aandacht aan functies die NULL kunnen retourneren
Als een functie NULL kan retourneren, bedenk dan of dit een mogelijkheid is en of dat later in uw code problemen zou veroorzaken. Hier is een voorbeeld van de malloc-functie die de null-controle gebruikt (als (ptr)) om ervoor te zorgen dat het alleen pointers met geldige waarden verwerkt:
-
int *ptr = malloc(N * sizeof(int));
als (ptr) {
int ik;
voor (i = 0; ik < N; ++i)
ptr = ik;
}
Stap 3. Begrijp dat NULL 0 is, maar u moet altijd NULL gebruiken in plaats van 0 wanneer u voor de duidelijkheid met aanwijzers werkt
Historisch gezien vertegenwoordigde C NULL als het getal 0 (dat wil zeggen, 0x00). Tegenwoordig kan het een beetje ingewikkelder worden en verschilt het per besturingssysteem. U kunt meestal controleren op NULL met ptr == 0, maar er zijn gevallen waarin dit een probleem kan veroorzaken. Wat misschien nog belangrijker is, is dat het gebruik van NULL het duidelijk maakt dat u met verwijzingen werkt voor andere mensen die uw code lezen.