Senin, November 18, 2019

Variabel static pada bahasa C

Variabel static memiliki properti dari penyimpanan nilai setelah variabel tersebut keluar dari scope-nya. Variabel static menyimpan nilai sebelumnya pada scope sebelumnya dan tidak diinisialisasi lagi pada scope yang baru.

sintak:
static data_type var_name = var_value;

Berikut ini beberapa fakta menarik tentang variabel static pada bahasa C:
satu, sebuah variabel static int tetap berada pada memori selama program dijalankan. Sebuah variabel normal atau auto akan dihancurkan memorinya ketika sebuah fungsi memanggil dimana variabel tersebut dideklarasikan ketika telah selesai beroperasi.

Contoh, digunakan static int untuk menghitung angka setiap kali fungsi dipanggil, tetapi pada variabel auto hal ini tidak bisa dilakukan untuk proses penghitungan tersebut.

Contoh program berikut akan mencetak "1 2"

Output:
1 2

Namun program berikut ini akan mencetak hasil "1 1"

Output:
1 1

dua, Variabel static mengalokasikan memori pada segmen data, tetapi tidak pada segmen stack.

tiga, Variabel static seperti variabel global diinisialisasi dengan nilai 0 jika tidak diinisialisasi secara eksplisit. Contohnya seperti pada program berikut ini, nilai dari x akan dicetak sebagai 0, jika nilai dari y adalah garbage. Seperti terlihat pada program berikut:

Output:
0
[some_garbage_value]

empat, Pada bahasa C, variabel static hanya dapat diinisialisasi menggunakan konstanta literal. Contoh, perhatikan kesalahan program berikut pada saat kompilasi.

Output:
 In function 'main':
9:5: error: initializer element is not constant
     static int i = initializer();
     ^

lima, Variabel static global dan fungsi juga dimungkinkan penerapannya pada bahasa c dan c++. Tujuannya adalah membatasi scope dari variabel atau fungsi menuju sebuah file.

enam, Variabel static tidak seharusnya dideklarasikan di dalam structure. Alasannya, adalah kompilator membutuhkan seluruh elemen structure agar dapat diletakkan bersama dengan alokasi memori untuk anggota structure secara berdekatan. Sangat dimungkinkan untuk mendeklarasikan structure di dalam sebuah fungsi atau segmen stack ataupun alokasi memori dinamis atau segmen heap ataupun juga secara global seperti BSS atau segment data. Apapun bentuk kasusnya, semua anggota struktur harus berada pada segmen memori sama karena nilai untuk elemen structure dengan menghitung elemen offset dari alamat awal dari struktur. Memisahkan satu anggota saja ke segmen data mengalahkan tujuan variabel statis dan dimungkinkan untuk memiliki seluruh structure sebagai statis.





Related Posts

Variabel static pada bahasa C
Oleh

mohon untuk melakukan koreksi jika terdapat kesalahan pada penulisan blog ini,