Aturan Penggunaan Scope Bahasa C dan Fungsinya
// filename: file1.c
int a;
int main(void)
{
a = 2;
}
// filename: file2.c
// Ketika file terhubung dengan file1.c,
extern int a;
int myfun()
{
a = 2;
}
Untuk membatasi akses pada file yang saat ini digunakan, variabel global dapat ditandai dengan static.
dua, block scope: sebuah block adalah sekumpulan dari statement tertutup dengan yang berada dalam tanda kurung {}. Sebuah block mungkin saja bersarang pada bahasa C. Sebuah deklarasi variabel pada block dapat diakses hanya dalam block dan semua inner block dari block tersebut, tetapi tidak dapat diakses dari luar block.
Jika inner block mendeklarasikan sebuah variabel dengan nama yang sama sebagai nama deklarasi variabel oleh block outer, maka visibilitas dari block outer berakhir pada } deklarasi inner block.
/* Aturan Scope pada Bahasa C */
#include<stdio.h>
int main()
{
{
int x = 10, y = 20;
{
// Blok terluar mengandung
// deklarasi dari x dan y,
// sehingga statement yang
// mengikutinya bernilai valid
// dan mencetak nilai 10 dan 20
printf("x = %d, y = %d\n", x, y);
{
// variabel y dideklarasikan
// ulang, sehingga blok terluar y
// tidak dapat diakses di dalam
// blok atau scope
int y = 40;
x++; // Mengubah variabel blok
// luar x dengan nilai 11
y++; // Mengubah nilai variabel y
// pada blok ini menjadi 41
printf("x = %d, y = %d\n", x, y);
}
// Statement ini hanya mengakses
// variabel blok terluar
printf("x = %d, y = %d\n", x, y);
}
}
return 0;
}
x = 11, y = 41
x = 11, y = 20
Bagaimana jika fungsi dan parameter diteruskan ke fungsi?
Sebuah fungsi adalah merupakan sebuah block. Parameter dan variabel lokal lainnya dari sebuah fungsi mengikuti aturan scope pada block yang sama.
Jawabannya tidak dapat, sebuah deklarasi variabel dalam sebuah block dapat diakses di dalam block dan semua inner block dari block itu sendiri. Contohnya, perhatikan program yang menghasilkan compiler error berikut ini.
/* Aturan Scope pada bahasa C */
int main()
{
{int x = 10;}
{printf("%d", x); // Error: variabel
// x tidak dapat diakses pada blok ini
}
return 0;
}
prog.c:8:15: error: 'x' undeclared (first use in this function)
printf("%d", x); // Error: x is not accessible here
^
prog.c:8:15: note: each undeclared identifier is
reported only once for each function it appears in
Latihan, perkirakan hasil keluaran atau output program berikut ini.
/* Aturan Scope pada Bahasa C */
#include<stdio.h>
int main()
{
int x=1,y=2,z=3;
printf(" x = %d, y = %d, z ="
" %d \n", x, y, z);
{
int x = 10;
float y = 20;
printf(" x = %d, y = %f, z ="
" %d \n", x, y, z);
{
int z = 100;
printf(" x = %d, y = %f, z ="
" %d \n", x, y, z);
}
}
return 0;
}
x = 10, y = 20.000000, z = 3
x = 10, y = 20.000000, z = 100
- 4 Cara Utama Deklarasi Variabel Sebagai Konstanta Bahasa C dan C++ [klik]
- 7 Alasan Kenapa Nama Variabel Tidak Diawali dengan Angka pada Bahasa C [klik]
- Cara Inisialisasi Variabel Static dan Global pada Bahasa C [klik]
- 4 Tipe Data Umum yang Digunakan pada Bahasa C [klik]
- Penjelasan Singkat, Fungsi Bool Bahasa C [klik]
- Penjelasan Singkat, Integer Promotion Bahasa C [klik]
- Perbandingan Nilai Float Terhadap Nilai Lain pada Bahasa C [klik]
Apa yang dimaksud dengan variabel lokal?
BalasHapusVariabel lokal hanya dapat diakses pada Scope itu sendiri atau pada fungsi itu sendiri. Jika ada akses lain dari luar Scope atau fungsi maka akan bernilai invalid.
HapusVariabel lokal dibuat ketika kontrok mencapai suatu Scope atau fungsi yang mengandung variabel lokan dan kemudian dihilangkan setelah keluar dari Scope atau fungsi tersebut.
Apa yang dimaksud dengan variabel global.
BalasHapusKebalikan dari variabel lokal, variabel global membuat isi dari Scope atau fungsi dapat diakses dari luar Scope atau fungsi itu sendiri dan tidak akan menyebabkan error atau invalid pada program.
HapusSecara sederhana, bagaimana aturan Scope membatasi akses pada bahasa pemrograman?
BalasHapusAturan Scope menentukan bagian mana dari suatu program atau item data yang dapat mengakses pada Scope yang telah dibatasi atau telah ditentukan.
Hapus