Null in C controleren: 7 stappen (met afbeeldingen)

Inhoudsopgave:

Null in C controleren: 7 stappen (met afbeeldingen)
Null in C controleren: 7 stappen (met afbeeldingen)

Video: Null in C controleren: 7 stappen (met afbeeldingen)

Video: Null in C controleren: 7 stappen (met afbeeldingen)
Video: How to Change the Icon Size in GIMP - [ Make GIMP Icons Bigger ] 2024, Mei
Anonim

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

Controleer Null in C Stap 1
Controleer Null in C Stap 1

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

    }

Controleer Null in C Stap 2
Controleer Null in C Stap 2

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

    }

Controleer Null in C Stap 3
Controleer Null in C Stap 3

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

Controleer Null in C Stap 4
Controleer Null in C Stap 4

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

Controleer Null in C Stap 5
Controleer Null in C Stap 5

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.

    }

Controleer Nul in C Stap 6
Controleer Nul in C Stap 6

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;

    }

Controleer Null in C Stap 7
Controleer Null in C Stap 7

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.

Tips

Je kunt deze check-in while-loops net als alle andere gebruiken: terwijl (NULL == ptr) {

Aanbevolen: