Di dalam kode C, sepasang tanda kurung kurawal { ... } membentuk sebuah blok kode (atau compound statement). Blok ini bukan sekadar hiasan visual; blok menentukan di mana sebuah variabel hidup, di mana statement kontrol alur seperti if dan for berlaku, serta bagaimana compiler mengelola memori sementara. Pada Chapter ini kita akan mempelajari bagaimana blok kode bekerja, hubungan blok dengan scope variabel, serta konvensi penulisan blok yang membantu keterbacaan.
Apa Itu Blok Kode #
Blok kode adalah kumpulan statement dan deklarasi yang dibungkus oleh { dan }. Dari sudut pandang compiler, blok diperlakukan sebagai satu statement tunggal. Itu sebabnya tubuh fungsi main, tubuh if, dan tubuh for semuanya dibungkus kurung kurawal — agar compiler menganggap seluruh tubuh tersebut sebagai satu unit.
#include <stdio.h>
int main(void) {
int a = 10;
/* Blok dalam: variabel b hanya hidup di sini */
{
int b = 20;
int total = a + b;
printf("a + b = %d\n", total);
}
/* b sudah tidak dapat diakses di sini */
printf("a = %d\n", a);
return 0;
}Output yang Dihasilkan:
a + b = 30
a = 10Mari kita telaah baris-baris kode di atas:
- Baris 4 (
int main(void) {): tanda{membuka blok tubuh fungsimain. Semua variabel yang dideklarasikan di dalam blok ini hidup selamamainberjalan. - Baris 8 (
{): tanda kurung kurawal buka kedua memulai blok dalam (nested block). Variabelbdantotaldideklarasikan di dalam blok ini dan hanya dapat diakses dari dalam blok ini. - Baris 12 (
}): tanda kurung kurawal tutup mengakhiri blok dalam. Variabelbdantotalberhenti eksis — compiler membebaskan memori yang dipakai keduanya. - Baris 15 (
printf("a = %d\n", a);): variabelamasih dapat diakses karenaadideklarasikan di blok luar (main), bukan di blok dalam yang sudah ditutup.
Blok pada Struktur Kontrol #
Konstruksi if, else, for, while, dan switch mengharapkan tepat satu statement sebagai tubuhnya. Ketika tubuh berisi lebih dari satu statement, kita wajib membungkusnya dengan blok. Sebaliknya, ketika tubuh hanya satu statement, blok bersifat opsional — tetapi sangat dianjurkan untuk tetap dipakai.
#include <stdio.h>
int main(void) {
int nilai = 60;
if (nilai >= 75) {
char predikat = 'A';
printf("Predikat: %c\n", predikat);
} else {
char predikat = 'B';
printf("Predikat: %c\n", predikat);
}
/* variabel predikat tidak dapat diakses di sini */
printf("Selesai\n");
return 0;
}Output yang Dihasilkan:
Predikat: B
SelesaiPada contoh di atas, blok if dan blok else masing-masing memiliki variabel predikat sendiri. Kedua variabel predikat ini berbeda satu sama lain karena berada di blok yang berbeda. Compiler tidak mengeluh karena deklarasi tersebut tidak bertabrakan — masing-masing terisolasi di bloknya. Setelah blok if-else selesai dieksekusi, nama predikat tidak dapat diakses lagi dari luar blok.
Variabel di Blok for #
Sejak C99, kita dapat mendeklarasikan variabel langsung di dalam header for — misalnya for (int i = 0; ...). Variabel tersebut hanya hidup selama loop berjalan; begitu loop selesai, variabel hilang dari scope.
#include <stdio.h>
int main(void) {
int i;
for (i = 0; i < 3; i++) {
int kuadrat = i * i; /* kuadrat di-declare ulang tiap iterasi */
printf("Iterasi %d: kuadrat = %d\n", i, kuadrat);
}
/* i masih hidup; kuadrat sudah hilang */
printf("Nilai akhir i: %d\n", i);
return 0;
}Output yang Dihasilkan:
Iterasi 0: kuadrat = 0
Iterasi 1: kuadrat = 1
Iterasi 2: kuadrat = 4
Nilai akhir i: 3Pada contoh di atas, variabel kuadrat dideklarasikan di dalam blok for. Setiap iterasi, blok for seakan dibuat dan dihancurkan kembali, sehingga kuadrat diciptakan ulang dengan nilai baru. Variabel i dideklarasikan di luar blok for, sehingga i tetap dapat diakses setelah loop selesai dengan nilai 3 — nilai pertama yang membuat kondisi i < 3 bernilai salah.
Konvensi Penempatan Kurung Kurawal #
Ada dua gaya penempatan kurung kurawal yang banyak dipakai di komunitas C:
- Allman style: kurung kurawal buka diletakkan di baris baru, sejajar dengan statement sebelumnya.c
if (kondisi) { printf("Ya\n"); } - K&R style: kurung kurawal buka diletakkan di akhir baris yang sama dengan statement.c
if (kondisi) { printf("Ya\n"); }
Kedua gaya tersebut setara dari sudut pandang compiler; pilihan utamanya adalah soal keterbacaan dan konsistensi tim. Yang penting, kita memilih satu gaya dan menerapkannya secara konsisten di seluruh codebase.