Kelas Penyimpanan C
"Kelas penyimpanan" dari suatu variabel menentukan apakah item tersebut memiliki masa pakai "global" atau "lokal". C menyebut dua masa hidup ini "statis" dan "otomatis". Item dengan masa pakai global tersedia dan memiliki nilai selama eksekusi program. Semua fungsi memiliki masa pakai global.
Variabel otomatis, atau variabel dengan masa pakai lokal, dialokasikan penyimpanan baru setiap kali kontrol eksekusi diteruskan ke blok tempat mereka ditentukan. Ketika eksekusi kembali, variabel tidak lagi memiliki nilai yang berarti.
C menyediakan penentu kelas penyimpanan berikut:
Sintaks
storage-class-specifier
:
auto
register
static
extern
typedef
__declspec (
extended-decl-modifier-seq
)
/* Khusus Microsoft */
Kecuali untuk __declspec
, Anda hanya dapat menggunakan satu storage-class-specifier
dalam declaration-specifier
deklarasi. Jika spesifikasi kelas penyimpanan tidak dibuat, deklarasi di dalam blok membuat objek otomatis.
Item yang dideklarasikan dengan penentu auto
atau register
memiliki masa pakai lokal. Item yang dideklarasikan dengan penentu static
atau extern
memiliki masa pakai global.
Karena typedef
dan __declspec
secara semantik berbeda dari empat storage-class-specifier
terminal lainnya, mereka dibahas secara terpisah. Untuk informasi spesifik tentang typedef
, lihat typedef
Deklarasi. Untuk informasi spesifik tentang __declspec
, lihat Atribut Kelas Penyimpanan yang Diperluas.
Penempatan deklarasi variabel dan fungsi dalam file sumber juga memengaruhi kelas penyimpanan dan visibilitas. Deklarasi di luar semua definisi fungsi dikatakan muncul di "tingkat eksternal". Deklarasi dalam definisi fungsi muncul di "tingkat internal."
Arti yang tepat dari setiap penentu kelas penyimpanan bergantung pada dua faktor:
Apakah deklarasi muncul di tingkat eksternal atau internal
Apakah item yang dideklarasikan adalah variabel atau fungsi
Penentu Kelas Penyimpanan untuk Deklarasi Tingkat Eksternal dan Penentu Kelas Penyimpanan untuk Deklarasi Tingkat Internal menjelaskan storage-class-specifier
terminal dalam setiap jenis deklarasi dan menjelaskan perilaku default saat storage-class-specifier
dihilangkan dari variabel. Penentu Kelas Penyimpanan dengan Deklarasi Fungsi membahas penentu kelas penyimpanan yang digunakan dengan fungsi.