Rabu, November 06, 2019

Aturan scope pada bahasa C

Scope dari sebuah identifier adalah bagian dari program dimana identifier mungkin secara langsung dapat diakses. Pada bahasa C, semua identifier adalah scope lexical atau static. Aturan scope pada bahasa C dapat ditutupi melalui dua kategori, yaitu:

satu, scope global: dapat diakses dimanapun pada program.

// filename: file1.c
int a;
int main(void)
{
a = 2;
}


// filename: file2.c
// When this file is linked with file1.c, functions
// of this file can access a
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.

Bagaimana jika dalam sebuah inner block memiliki penamaan yang sama dengan nama 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.

Output:
x = 10, y = 20
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.

Dapatkah variabel dari block diakses dalam block subsequent lainnya?
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.

Error:
prog.c: In function 'main':
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.

Output:
 x = 1, y = 2, z = 3
 x = 10, y = 20.000000, z = 3
 x = 10, y = 20.000000, z = 100





Related Posts

Aturan scope pada bahasa C
Oleh

"semoga yang memberikan komentar diberikan berkah kebaikan dari Allah, dijauhkan dari kejahatan, dan diberikan pahala ilmu dan amal jariyah dari sepenggal kata yang ia tinggalkan amiin :) "