[ HTML ] [ Java ] [ Bahasa C ]


Minggu, Mei 02, 2021

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
// Ketika file terhubung dengan file1.c, 
// maka fungsi dari file tersebut dapat diakses oleh 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.

/* 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;

}

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.

/* Aturan Scope pada bahasa C */

int main()

{

{int x = 10;}

 

{printf("%d", x); // Error: variabel

// x tidak dapat diakses pada blok ini

}

 

return 0;

}

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.

/* 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;

}

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

6 komentar:

  1. Apa yang dimaksud dengan variabel lokal?

    BalasHapus
    Balasan
    1. Variabel 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.

      Variabel lokal dibuat ketika kontrok mencapai suatu Scope atau fungsi yang mengandung variabel lokan dan kemudian dihilangkan setelah keluar dari Scope atau fungsi tersebut.

      Hapus
  2. Apa yang dimaksud dengan variabel global.

    BalasHapus
    Balasan
    1. Kebalikan 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.

      Hapus
  3. Secara sederhana, bagaimana aturan Scope membatasi akses pada bahasa pemrograman?

    BalasHapus
    Balasan
    1. Aturan Scope menentukan bagian mana dari suatu program atau item data yang dapat mengakses pada Scope yang telah dibatasi atau telah ditentukan.

      Hapus

Respon komentar 7 x 24 jam, so please be patient :D