Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C-opslagklassen begrijpen: Bereik, levensduur en prestaties

C-opslagklassen begrijpen

Ontdek hoe automatische, externe, statische en register-opslagklassen het bereik, de levensduur en de prestaties van een variabele in C definiëren.

Automatische (lokale) variabelen

Variabelen die binnen een blok worden gedeclareerd, zijn automatisch, ook wel lokale variabelen genoemd. Ze bestaan alleen binnen dat blok en worden vernietigd wanneer het blok eindigt.

#include <stdio.h>
int main(void) {
    for (int i = 0; i < 5; ++i) {
        printf("C programmeren\n");
    }
    // Fout: i is niet gedeclareerd in deze scope
    printf("%d", i);
    return 0;
}

Het uitvoeren van dit programma resulteert in een onbekende identifier i-fout omdat i alleen binnen het for-lusblok is gedeclareerd.

int main() {
    int n1; // lokaal voor main()
}
void func() {
    int n2; // lokaal voor func()
}

Hier is n1 onbereikbaar binnen func(), en n2 onbereikbaar binnen main().

Globale (externe) variabelen

Variabelen die buiten alle functies worden gedeclareerd, zijn globaal of extern. Ze kunnen worden benaderd vanuit elke functie binnen dezelfde vertaaleenheid. Wanneer een globale variabele in één bestand gedefinieerd is maar in een ander gebruikt, signaleert het sleutelwoord extern dat de definitie elders te vinden is.

Voorbeeld: Globale variabele

#include <stdio.h>
void display();
int n = 5; // globale variabele
int main() {
    ++n;
    display();
    return 0;
}
void display() {
    ++n;
    printf("n = %d\n", n);
}

Output

n = 7

Als n gedefinieerd is in file1.c en gebruikt in file2.c, voeg extern int n; bovenaan file2.c toe om een compilatiefout te voorkomen.

Registervariabelen

Het sleutelwoord register geeft de hint dat de compiler de variabele in een CPU-register moet opslaan voor snellere toegang. Moderne compilers voeren agressieve optimalisatie uit, waardoor de hint vaak onnodig is. Gebruik register alleen wanneer profiling een kritieke knelpunt op embedded systemen aangeeft.

Statische variabelen

Statische variabelen worden gedeclareerd met static en behouden hun waarde gedurende de gehele programma-uitvoering. Ze worden slechts één keer geïnitialiseerd, bij programma-start, en blijven bestaan tot programmaterminatie.

Voorbeeld: Statische variabele

#include <stdio.h>
void display();
int main() {
    display();
    display();
}
void display() {
    static int c = 1;
    c += 5;
    printf("%d ", c);
}

Output

6 11

Bij de eerste aanroep wordt c geïnitialiseerd op 1, daarna verhoogd tot 6. Bij de tweede aanroep behoudt c de vorige waarde 6, wordt verhoogd tot 11, en geprint.

Op bestandsniveau geeft een static-declaratie de variabele interne koppeling, waardoor het onzichtbaar is voor andere vertaaleenheden — een nuttige eigenschap voor encapsulatie.

Volgens de ISO C-standaard zorgt het gedrag van static voor een enkele instantie over alle functieaanroepen heen, wat cruciaal is voor stateful operaties zonder globale vervuiling.

C Taal

  1. C# Variabelen & Primitive Datatypes onder de knie krijgen: Complete gids
  2. Variabele Scope in C#: Klasse-, Methode- en Blokniveau
  3. C# Static Keyword: Static Variabelen, Methodes en Classes Beheersen
  4. C++ Class Templates Beheersen: Een Praktische Gids
  5. C Variabelen, Constanten en Literals: Een Complete Gids
  6. C++ Variabelen en Datatypes: Expert‑handleiding voor int, double, char, string, bool
  7. Variabelen in C: Types, naamgevingsregels en geheugenbeheer
  8. C-opslagklassen: Scope, levensduur en gebruik
  9. C-scoperegels: Lokale, globale en formele variabelen
  10. C-pointers: Praktische stappen naar geavanceerd programmeren
  11. Java Variabele Typen: Uitgebreide Gids