Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

Memahami Storage Class dalam C: auto, extern, static, register Dijelaskan

Apa itu Storage Class dalam C?

Storage class mendefinisikan cakupan, lokasi, inisialisasi, masa aktif, dan aksesibilitas variabel. Dalam C, setiap variabel tidak hanya bertipe tetapi juga ditugaskan storage class yang menentukan di mana dan bagaimana ia dapat diakses.

Ada empat storage class standar:

Storage Class Auto

Variabel yang dideklarasikan dengan auto (default untuk variabel lokal) hanya ada dalam blok tempat mereka didefinisikan. Mereka dihancurkan saat blok keluar, dan diinisialisasi dengan nilai tidak terdefinisi kecuali ditetapkan secara eksplisit.

int add(void) { int a = 13; auto int b = 48; // auto opsional return a + b; }

Demonstrasi cakupan:

#include <stdio.h> int main(void) { auto int j = 1; { auto int j = 2; { auto int j = 3; printf("%d ", j); // mencetak 3 } printf("\t%d ", j); // mencetak 2 } printf("%d\n", j); // mencetak 1 }

Output: 3 2 1

Storage Class Extern

Kata kunci extern mendeklarasikan variabel atau fungsi yang didefinisikan dalam unit terjemahan lain. Ini memungkinkan berbagi data di seluruh berkas sumber.

/* main.c */ #include <stdio.h> extern int i; // deklarasi int main(void) { printf("nilai integer eksternal adalah = %d\n", i); return 0; } /* original.c */ #include <stdio.h> int i = 48; // definisi 

Kompilasi kedua berkas bersama: gcc main.c original.c -o program. Menjalankan ./program menghasilkan:

nilai integer eksternal adalah = 48

Storage Class Static

Variabel statis mempertahankan nilainya selama program berjalan. Mereka dapat digunakan sebagai static lokal atau static cakupan berkas.

/* global static */ static int counter = 7; void next(void) { /* local static */ static int iteration = 13; iteration++; printf("iteration=%d dan counter=%d\n", iteration, counter); } int main(void) { while (counter < 10) { next(); counter++; } return 0; } 

Output:

iteration=14 dan counter=7 iteration=15 dan counter=8 iteration=16 dan counter=9

Storage Class Register

Gunakan register ketika variabel perlu diakses sering dan dapat muat dalam register CPU. Kompilator mungkin mengabaikan petunjuk jika register langka.

#include <stdio.h> int main(void) { register int weight; /* mencoba mengambil alamat gagal */ // int *ptr = &weight; // kesalahan kompilasi return 0; }

Mengompilasi kode menghasilkan:

error: address of register variable 'weight' requested

Tabel Ringkasan

Storage ClassKonteks DeklarasiLokasi PenyimpananNilai DefaultCakupanMasa Aktif
autodi dalam fungsi/blokMemoriTidak terdugaFungsi/blokFungsi/blok
registerdi dalam fungsi/blokRegister CPUTidak terdugaFungsi/blokFungsi/blok
externdi luar semua fungsiMemoriNolSeluruh programWaktu runtime program
static (lokal)di dalam fungsi/blokMemoriNolFungsi/blokWaktu runtime program
static (global)di luar semua fungsiMemoriNolBerkasWaktu runtime program

Poin Utama

Bahasa C

  1. Kelas dan Objek C#: Fondasi untuk OOP yang Kuat
  2. Kata Kunci Static C#: Menguasai Variabel, Metode, dan Kelas Statis
  3. Memahami Kelas Bersarang C#: Definisi, Penggunaan, dan Warisan
  4. Kelas & Objek C++: Panduan Praktis Pemrograman Berorientasi Objek
  5. Fungsi Teman dan Kelas Teman C++: Menguasai Kontrol Akses
  6. Menguasai Template Kelas C++: Panduan Praktis
  7. Memahami Kelas Penyimpanan C: Lingkup, Umur, dan Kinerja
  8. Memahami Kelas Penyimpanan C: Lingkup, Umur, dan Penggunaan
  9. Memahami Kelas Penyimpanan C++: Cakupan, Umur, dan Penggunaan
  10. Antarmuka C++: Menguasai Kelas Abstrakt & Fungsi Virtual Murni