Rabu, November 06, 2019

Deklarasi komplek dalam bahasa C

Kebanyakan program adalah bahasa yang dibuat dalam kode program sederhana, namun hal tersebut akan menjadi sulit jika beberapa deklarasi telah melibatkan pointer dan fungsi. Contohnya, perhatikan program bahasa C berikut ini:

void (*bsd_signal(int, void (*)(int)))(int);

Berikut adalah cara memahami deklarasi program yang telah dibuat sebelumnya.

satu, Konversi deklarasi bahasa C menjadi format postfix dan baca mulai dari kanan ke kiri.

dua, Konversi ekspresi menjadi postfix, mulai dari innermost parenthesis, jika innermost parenthesis tidak ditampilkan maka mulai dari nama deklarasi dan berlanjut ke urutan dari kanan program. Ketika mencapai tahap akhir parenthesis maka berpindah ke kiri. Ketika semua parenthesis telah diurai selanjutnya keluar dari parenthesis.

tiga, Lanjutkan sampai deklarasi selesai diuraikan.

Mari mulai dengan contoh sederhana.

int (*fp) ();

Konversikan ekspresi sebelumnya menjadi format postfix. Dari contoh, tidak ditemukan parenthesis, karenanya, akan dideklarasikan nama "fp". Selanjutnya, menuju ke bagian kanan dari ekspresi, tetapi tidak terdapat apapun dibagian kanan dari "fp", karenanya lanjut ke bagian kiri. Pada bagian kiri ditemukan "*", secara cetak "*" dan keluar dari parenthesis. Maka didapat bentuk ekspresi sebagai berikut.

fp * () int

Sekarang baca ekspresi postfix mulai dari kiri ke kanan, dimana fp adalah point ke fungsi yang mengembalikan nilai int.

Contoh selanjutnya:

int (*daytab) [13]

Postfix: daytab * [13] int
Maknanya: daytab adalah pointer menuju array 13 dengan tipe integer.

void (*f[10]) (int,int)

Postfix: f[10] * (int,int) void
Maknanya: f adalah sebuah array yang merupakan pointer menuju ke fungsi yang membutuhkan dua argumen masukkan dengan tipe integer yang bertipe void.

char (*(*x())[]) ()

Postfix: (*x())[] * () char
: x()*[] * () char
Maknanya: x adalah sebuah fungsi yang mengembalikan nilai pointer ke array dari pointer ke fungsi yang mengembalikan nilai char.

char (*(*x[3])())[5]

Postfix: (*x[3])() * [5] char
: x[3]*() * [5] char
Maknanya: x adalah array dari 3 pointer ke fungsi yang mengembalikan nilai pointer ke array 5 dengan tipe char.

int *(*(*arr[5])()) ()

Postfix: arr[5]*() * () * int
Maknanya: arr adalah array 5 pointer ke fungsi yang mengembalikan nilai pointer ke fungsi yang mengembalikan nilai pointer ke integer.

void (*bsd_signal(int sig, void (*func)(int)))(int);

Postfix: bsd_signal(int sig, void (*func)(int)) * (int) void
Maknanya : bsd_signal adalah sebuah fungsi yang mengambil nilai integer dan sebuah pointer menuju sebuah fungsi yang mengambil nilai integer sebagai argumen dan return void dan mengembalikannya melalui pointer ke sebuah fungsi yang mengambil integer sebagai argumen dan void return.





Related Posts

Deklarasi komplek dalam 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 :) "