Memahami Kelas Penyimpanan C: Lingkup, Umur, dan Kinerja
Memahami Kelas Penyimpanan C
Jelajahi bagaimana kelas penyimpanan automatic, external, static, dan register mendefinisikan lingkup, umur, dan kinerja variabel dalam C.
Variabel Automatic (Lokal)
Variabel yang dideklarasikan di dalam blok adalah automatic, juga dikenal sebagai variabel lokal. Mereka hanya ada di dalam blok tersebut dan dihancurkan saat blok berakhir.
#include <stdio.h> int main(void) { for (int i = 0; i < 5; ++i) { printf("C programming\n"); } // Kesalahan: i tidak dideklarasikan dalam cakupan ini printf("%d", i); return 0; }
Menjalankan program ini menghasilkan kesalahan undeclared identifier i karena i hanya dideklarasikan di dalam blok loop for.
int main() { int n1; // lokal ke main() } void func() { int n2; // lokal ke func() }
Di sini, n1 tidak dapat diakses di dalam func(), dan n2 tidak dapat diakses di dalam main().
Variabel Global (External)
Variabel yang dideklarasikan di luar semua fungsi adalah global atau external. Mereka dapat diakses dari setiap fungsi dalam unit terjemahan yang sama. Ketika variabel global didefinisikan dalam satu berkas tetapi digunakan dalam berkas lain, kata kunci extern menunjukkan bahwa definisinya berada di tempat lain.
Contoh: Variabel Global
#include <stdio.h> void display(); int n = 5; // variabel global int main() { ++n; display(); return 0; } void display() { ++n; printf("n = %d\n", n); }
Output
n = 7
Jika n didefinisikan dalam file1.c dan digunakan dalam file2.c, tambahkan extern int n; di bagian atas file2.c untuk menghindari kesalahan kompilasi.
Variabel Register
Kata kunci register memberitahu kompiler agar menyimpan variabel dalam register CPU untuk mempercepat akses. Kompiler modern melakukan optimisasi yang agresif, seringkali membuat petunjuk ini tidak diperlukan. Gunakan register hanya ketika profil menunjukkan bottleneck kritis pada sistem tertanam.
Variabel Statis
Variabel statis dideklarasikan dengan static dan mempertahankan nilainya selama seluruh eksekusi program. Mereka diinisialisasi hanya sekali, saat startup program, dan tetap ada sampai program berakhir.
Contoh: Variabel Statis
#include <stdio.h> void display(); int main() { display(); display(); } void display() { static int c = 1; c += 5; printf("%d ", c); }
Output
6 11
Pada pemanggilan pertama, c diinisialisasi ke 1, lalu ditingkatkan menjadi 6. Pada pemanggilan kedua, c mempertahankan nilai sebelumnya sebesar 6, ditingkatkan menjadi 11, dan dicetak.
Pada cakupan berkas, deklarasi static memberikan variabel tautan internal, sehingga tidak terlihat oleh unit terjemahan lain—fitur yang berguna untuk enkapsulasi.
Menurut standar ISO C, perilaku static memastikan satu instance di seluruh pemanggilan fungsi, yang kritis untuk operasi berstatus tanpa pencemaran global.