Deklarasi Kompleks Bahasa C dan Fungsinya
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.
Sebelum memahami lebih dalam materi tentang Deklarasi Kompleks Bahasa C dan Fungsinya, terlebih dahulu pelajari materi tentang: Linker Bahasa C dan Fungsinya [klik], Aturan Penggunaan Scope Bahasa C dan Fungsinya [klik], dan Scope Variabel Bahasa C dan Fungsinya [klik].
Berikut adalah cara memahami deklarasi program yang telah dibuat sebelumnya.
- Konversi deklarasi bahasa C menjadi format postfix dan baca mulai dari kanan ke kiri.
- 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.
- 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.
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.
Referensi Tambahan:
- 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]
- 6 Jenis Perbedaan Kebutuhan Tipe Data Long pada Bahasa C [klik]
- Tipe Data size_t pada Bahasa C [klik]
Artikel ini didedikasikan kepada: Agung Pranoto, Aisyah Harum, Amalia Ayu Rizkiani, Anggita Ragil Subekti, dan Bagus Arief Setiawan.
Apa yang dimaksud dengan deklarasi pada bahasa C?
BalasHapusDeklarasi merupakan bentuk konstruksi pada bahasa C yang digunakan untuk memperkenalkan satu atau lebih pengenal ke dalam program dan menentukan arti dan isi propertinya. Deklarasi dapat muncul dalam cakupan apapun.
HapusDeklarasi pada bahasa C artinya memberitahukan kompilator tentang jenis, ukuran pada program. Sedang deklarasi pada bahasa C jika terkait dengan fungsi maka artinya memberitahukan tentang jenis dan ukuran parameter dari variabel apapun pada fungsi tersebut, atau jenis dan fungsi yang ditentukan oleh programmer dalam suatu program, dimana tidak ada ruang cadangan apapun dalam suatu memori untuk variabel apapun dalam kasus deklarasi tersebut.
HapusSecara umum, dalam bahasa pemrograman, deklarasi adalah pernyataan yang menjelaskan pengenal, seperti nama variael atau fungsi yang terdapat dalam suatu kode program. Contoh, dalam pemrograman bahasa C, sebuah variabel harus dideklarasikan dengan tipe data tertentu sebelum dapat diberi nilai dalam variabel tersebut.
BalasHapusApa perbedaan antara pendeklarasian dan pendefinisian pada bahasa pemrograman?
BalasHapusContoh untuk variabel dalam bahasa C, deklarasi berarti hanya menyatakan tipe datanya bersamaan dengan nama yang diberikan untuk pengalokasian memori variabel tersebut. Sedangkan definisi berarti memberikan ilai dari variabel yang telah dideklarasikan tersebut.
Hapus