Kelas Penyimpanan Bahasa C dan Fungsinya
- auto: Merupakan kelas penyimpanan default (storage default class) untuk segala deklarasi variabel di dalam sebuah fungsi atau sebuah block. Keyword auto biasanya digunakan ketika membuat program dalam bahasa C. Variabel auto hanya bisa diakses dengan block atau fungsi yang telah dideklarasikan dan tidak berada diluar dari scope-nya. Keyword ini hanya bisa diakses dengan block bersarang bersamaan parent block atau fungsi pada variabel auto yang telah dideklarasikan. Namun, auto juga bisa diakses dari luar scope-nya jika menggunakan konsep pointer, dengan cara melakukan pointing atau penunjukkan pada lokasi memori yang tepat dimana variabel berada. Keyword ini diberi nilai sisa secara otomatis dimanapun keyword dideklarasikan.
- extern: Kelas penyimpanan extern secara sederhana memberitahukan bahwa variabel telah didefinisikan dan tidak berada pada block sama dengan block yang menggunakannya. Sederhanya, nilai yang telah ditetapkan terhadap kelas penyimpanan tidak berada bersama pada block dimana kelas tersebut digunakan. Nilai yang ditetapkan berada pada block berbeda dan dapat dilakukan ovewritten atau perubahan pada block yang berbeda pula. Sehingga variabel extern tidak lain adalah variabel global yang diinisialisasi dengan nilai legal dimana variabel tersebut dideklarasikan sesuai perintah dimana variabel tersebut akan digunakan. Variabel ini dapat diakses dengan fungsi atau block apapun. Juga, sebuah variabel global normal dapat membuat extern pula dengan menambahkan keyword 'extern' sebelum pendeklarasian atau pendefinisian oleh fungsi atau block apapun. Pada dasarnya hal ini menandakan bahwa, tidak dilakukan inisialisasi sebuah variabel baru melainkan hanya menggunakan atau melakukan akses kepada variabel global semata. Tujuan utama dari penggunakan variabel extern adalah variabel tersebut dapat diakses antara dua file berbeda yang menjadi satu bagian dari program.
- static: Kelas penyimpanan digunakan untuk mendeklarasikan variabel static yang secara populer digunakan ketika membuat program dalam bahasa C. Variabel static memiliki properti dari penyimpanan nilai bahkan setelah nilai tersebut keluar dari scope-nya. Karena hal tersebut, variabel static hanya menggunakan nilai terakhir yang digunakan pada scope-nya. Sehingga bisa dikatakan bahwa variabel ini hanya diinisialisasi sekali dan akan tetap exist sampai proses atau program telah berhenti dijalankan. Sehingga, tidak ada memori baru yang dialokasikan karena memori tersebut tidak dideklarasikan ulang. Scope dari variabel ini bersifat lokal pada fungsi dimana variabel tersebut didefinisikan. Variabel static global dapat diakses dimanapun pada bagian program. Secara otomatis, ditetapkan nilai 0 oleh kompilator ketika variabel ini dideklarasikan.
- register: Kelas penyimpanan yang mendeklarasikan variabel register memiliki fungsi sama seperti variabel auto. Perbedaannya adalah kompilator mencoba untuk menyimpan variabel ini pada register dari mikroprosesor jika free register tidak tersedia. Hal ini membuat penggunaan dari variabel register lebih cepat daripada variabel yang disimpan pada memori selama waktu runtime dari program. Jika sebuah free register tidak tersedia, maka nilainya akan disimpan pada bagian memori saja. Umumnya beberapa variabel dapat diakses lebih sering pada sebuah program yang dideklarasikan dengan keyword register akan memiliki waktu running yang lebih baik terhadap sebuah program. Alamat register tidak bisa didapatkan dengan menggunakan pointer.
Sintak: storage_class var_data_type var_name;
Contoh: Fungsi berikut mengikuti sintak yang sama seperti yang diberikan pada variabel sebelumnya. Perhatikan contoh program bahasa c berikut untuk lebih memahami.
// Sebuah program bahasa C
// untuk mendemonstrasikan
// perbedaan class storage
#include <stdio.h>
// Mendeklarasikan variabel
// yang akan dibuat eksternal
// dengan nilai awal juga da-
// pat diinisialisasi ke x
int x;
void autoStorageClass()
{
printf("\nDemonstrasi class"
" auto\n\n");
// Mendeklarasikan variabel
// otomatis (secara sederhana
// "int a=32;" juga dapat be-
// kerja secara baik)
auto int a = 32;
// Mencetak nilai variabel
// auto 'a'
printf("Nilai dari variabel "
"'a' dideklarasikan sebagai a"
"uto: %d\n",a);
printf("-------------------"
"-------------");
}
void registerStorageClass()
{
printf("\nDemonstrasi class"
" register\n\n");
// Mendeklarasikan sebuah
// variabel register
register char b = 'G';
// Mencetak nilai variabel
// register 'b'
printf("Nilai dari variabel "
"'b' dideklarasikan sebagai"
" register: %d\n",b);
printf("--------------------"
"------------");
}
void externStorageClass()
{
printf("\nDemonstrasi class"
" extern\n\n");
// Memberitahukan kompilator
// bahwa variabel z adalah
// variabel extern dan telah
// didefinisikan dibagian ma-
// napun (atau telah didekla-
// rasikan sebelum fungsi main)
extern int x;
// Mencetak variabel extern 'x'
printf("Nilai dari variabel "
"'x' dideklarasikan sebagai "
"extern: %d\n",x);
// Nilai dari variabel extern
// x dimodifikasi
x = 2;
// Mencetak nilai modifikasi
// dari variabel extern 'x'
printf("Nilai modifikasi dari"
" variabel 'x' dideklarasikan"
" sebagai extern: %d\n",x);
printf("---------------------"
"-----------");
}
void staticStorageClass()
{
int i = 0;
printf("\nDemonstrasi class"
" static\n\n");
// Dengan menggunakan sebuah
// variabel static 'y'
printf("Deklarasi 'y' sebagai"
" variabel static di dalam "
"looping.\n"
"Namun, deklarasi ini hanya "
"akan muncul satu kali seba"
"gai variabel static 'y'.\n"
"Jika tidak muncul, maka seti"
"ap kali looping atau perula"
"ngan nilai dari 'y' akan men"
"deklarasikan nilai 5 sebagai"
" nilai yang diterima dari va"
"riabel 'p'\n");
printf("\nMulai looping:\n");
for (i = 1; i < 5; i++) {
// Deklarasi variabel
// static 'y'
static int y = 5;
// Deklarasi variabel
// non-static 'p'
int p = 10;
// Melakukan penambahan nilai
// secara increment dari vari-
// abel y dan p sebesar 1 nilai
y++;
p++;
// Mencetak nilai dari y pada
// setiap kali looping atau
// perulangan
printf("\nNilai dari 'y', "
"dideklarasikan sebagai sta"
"tic, dalam %d perulangan a"
"dalah %d\n",i, y);
// Mencetak nilai dari p pada
// tiap kali perulangan
// atau looping
printf("Nilai dari variabel "
"non static 'p', dalam %d per"
"ulangan adalah %d\n",i, p);
}
printf("\nLooping berakhir:\n");
printf("---------------------"
"-----------");
}
int main()
{
printf("Sebuah program untuk "
"mendemonstrasikan kelas peny"
"impanan pada bahasa C\n\n");
// Untuk mendemonstrasikan
// storage class auto
autoStorageClass();
// Untuk mendemonstrasikan
// storage class register
registerStorageClass();
// Untuk mendemonstrasikan
// storage class extern
externStorageClass();
// Untuk mendemonstrasikan
// storage class static
staticStorageClass();
// Akhir program
printf("\n\nStorage Classes"
" telah didemonstrasikan");
return 0;
}
- Inisialisasi Variabel Statik Bahasa C dan Larangannya
- Keyword Register Bahasa C dan Fungsinya
- Mencetak dan Menginput Nilai Bahasa C menggunakan Printf dan Scanf
- Getchar dan Putchar Bahasa C Beserta Fungsinya
- Scanset Bahasa C dan Fungsinya
- Mencetak String Bahasa C menggunakan Puts dan Printf
- Printf %n Bahasa C dan Fungsinya
6 komentar untuk "Kelas Penyimpanan Bahasa C dan Fungsinya"
Hubungi admin melalui Wa : +62-896-2414-6106
Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.
Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.
- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -
Apa yang dimaksud dengan kelas penyimpanan atau storage class pada bahasa C?
BalasHapusKelas penyimpanan dalam bahasa C digunakan untuk mewakili informasi tambahan tentang suatu variabel. Kelas penyimpanan mewakili ruang lingkup dan masa pakai sebuah variabel. Kelas penyimpanan juga memberitahukan siapa saja yang dapat mengakses variabel tersebut dan darimana sumber aksesnya. Auto, extern, register, static adalah empat kelas penyimpanan yang terdapat pada bahasa C.
HapusKelas penyimpanan mana yang memiliki performa tercepat pada bahasa C?
BalasHapusUntuk akses tercepat dari suatu variabel pada kelas penyimpanan, maka register memiliki kemampuan yang lebih baik daripada auto. Karena variabel register disimpan pada memori register sedangkan variabel auto disimpan pada memori CPU utama.
Hapuscatatan: hanya beberapa variabel saja yang dapat disimpan dalam memori register.
Apakah typedef juga termasuk kelas penyimpanan pada bahasa C?
BalasHapusKelas penyimpanan variabel pada bahasa C digunakan untuk menentukan apakah item tersebut memiliki akses yang bersifat global ataukah lokal. Pada bahasa C, typedef dianggap sebagai kelas penyimpanan sama seperti kelas penyimpanan lainnya (auto, register, static, extern), namun penggunaan typedef adalah lebih spesifik untuk menentukan nama alternatif terhadap jenis tipe yang tersedia pada bahasa C.
Hapus