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: Scope, levensduur en gebruik

Wat is een opslagklasse?

Een opslagklasse (storage class) bepaalt de zichtbaarheid (scope) en levensduur van variabelen/functies. Vier klassen in C:

  • auto
  • register
  • static
  • extern

auto – standaard lokaal

Standaard voor alle lokale variabelen. Slechts binnen functie/blok zichtbaar. auto int x; is gelijk aan int x;. Zeldzaam expliciet gebruikt.

register – hint voor processorregister

Suggereert compiler om variabele in CPU-register op te slaan (snellere toegang). Beperkingen:

  • Maximaal registergrootte (meestal 1 woord)
  • Geen adres (& operator niet toegestaan)
  • Alleen voor variabelen die veel gebruikt worden (tellers)
  • Compiler kan negeren
{ register int counter; }

static – behoud waarde tussen aanroepen

Lokaal static: behoudt waarde tussen functie-aanroepen, initialiseer 1×.

void func() {
    static int count = 0;  // initialisatie 1x
    count++;
    printf("%d ", count);
}

Globale static: beperkt zichtbaarheid tot bestand (file scope), geen externe linking.

Voorbeeld

#include <stdio.h>

static int global_count = 5;  // file-scope

void func(void) {
    static int local_static = 5;  // behoudt waarde
    local_static++;
    printf("local_static=%d, global_count=%d\n", local_static, global_count);
}

int main() {
    while (global_count--) func();
    return 0;
}
local_static=6, global_count=4
local_static=7, global_count=3
local_static=8, global_count=2
local_static=9, global_count=1
local_static=10, global_count=0

extern – referentie naar globale variabele in ander bestand

Gebruikt in multi-bestandsprojecten. extern declaratie zonder initialisatie.

Bestand 1: main.c

#include <stdio.h>
int count = 5;           // definitie
extern void write_extern();  // declaratie functie

int main() {
    write_extern();
    return 0;
}

Bestand 2: support.c

#include <stdio.h>
extern int count;        // referentie naar main.c

void write_extern(void) {
    printf("count is %d\n", count);
}

Compileren

$ gcc main.c support.c -o programma
$ ./programma
count is 5

Samenvattingstabel

KlasseScopeLevensduurInitieelAdres neembaar?
autolokaal (blok)functie-aanroepgarbageja
registerlokaal (blok)functie-aanroepgarbagenee
static (lokaal)lokaal (blok)programma0/NULLja
static (globaal)bestandprogramma0/NULLja
externglobaal (hele prog)programma0/NULL (in definerend bestand)ja

C Taal

  1. Hoe flute aantal frees prestaties beïnvloedt
  2. C++ Structuren vs Classes: Een praktische gids voor embedded-ontwikkelaars
  3. C++ klassen & objecten: praktische gids voor object-georiënteerd programmeren
  4. C++ Friend Functies en Friend Classes: Toegangscontrole Beheersen
  5. C-opslagklassen begrijpen: Bereik, levensduur en prestaties
  6. Storage Classes in C++ Begrijpen: Scope, Levensduur en Gebruik
  7. C++ Interfaces: Abstracte Klassen & Pure Virtual Functions Beheersen
  8. C# Klassen Beheersen: Blauwprint voor Krachtig Objectgeoriënteerd Programmeren
  9. Python's str.count() beheersen: Karakters & substrings tellen met voorbeelden
  10. Python list.count(): Expert Gids met Praktische Voorbeelden
  11. Java Onder de Knie: Objects, Classes en Kern OOP Concepten