Sebelum melangkah ke kode, kita perlu memahami apa sebenarnya bahasa C itu dan mengapa bahasa ini masih dipakai setengah abad setelah diciptakan. C adalah bahasa pemrograman tingkat rendah yang relatif tipis: sedikit keyword, sedikit abstraksi, dan kontrol penuh terhadap memori. Pada Chapter ini kita akan melihat bentuk paling dasar kode C, ciri khas tipe datanya, serta bagaimana sebuah fungsi didefinisikan dan dipanggil. Tujuannya bukan menghafal sintaks, melainkan membangun intuisi mengapa C menjadi bahasa yang dipilih untuk menulis sistem operasi, compiler, hingga perangkat keras.
Apa Itu Bahasa C #
C adalah bahasa pemrograman compiled dan statically typed yang diciptakan oleh Dennis Ritchie di Bell Labs sekitar tahun 1972. Kata compiled berarti kode sumber C harus diterjemahkan terlebih dahulu oleh compiler menjadi executable sebelum bisa dijalankan oleh prosesor. Kata statically typed berarti setiap variabel wajib memiliki tipe data yang sudah ditentukan pada saat kode ditulis, dan tipe tersebut tidak bisa berubah saat program berjalan.
Karateristik utama C yang membedakannya dari bahasa tingkat tinggi seperti Python atau JavaScript adalah:
- Tipe data eksplisit: variabel harus dideklarasikan dengan tipe seperti
int,char, ataudouble. - Manajemen memori manual: programmer bertanggung jawab mengalokasikan dan membebaskan memori sendiri.
- Tanpa garbage collector: tidak ada mekanisme otomatis yang membersihkan memori yang sudah tidak terpakai.
- Pointer sebagai warga kelas satu: alamat memori dapat dimanipulasi langsung lewat pointer.
- Standar library kecil: hanya menyediakan fungsi-fungsi dasar, sisanya disediakan pustaka pihak ketiga.
Mari kita lihat wujud program C yang paling sederhana:
#include <stdio.h>
int main(void) {
printf("Halo dari bahasa C!\n");
printf("Bahasa ini lahir di Bell Labs pada awal 1970-an.\n");
return 0;
}Output yang Dihasilkan:
Halo dari bahasa C!
Bahasa ini lahir di Bell Labs pada awal 1970-an.Mari kita telaah baris-baris kode di atas:
- Baris 1 (
#include <stdio.h>): direktif preprocessor yang menyertakan header Standard Input/Output agar fungsiprintfdapat dipakai. - Baris 3 (
int main(void)): titik masuk program. Kata kuncivoiddi parameter menandakan fungsimaintidak menerima argumen. - Baris 4 (
printf("Halo dari bahasa C!\n");): memanggil fungsiprintfuntuk mencetak teks ke standard output;\nadalah karakter newline. - Baris 5 (
printf("Bahasa ini lahir...");): baris kedua yang dicetak setelah baris pertama. - Baris 6 (
return 0;): mengembalikan0ke sistem operasi sebagai penanda program berakhir dengan sukses.
Tipe Data dan Ukurannya #
Berbeda dengan Python yang menyesuaikan tipe otomatis, C menuntut kita menyebut tipe variabel secara eksplisit. Tipe menentukan berapa banyak byte yang dialokasikan di memori dan operasi apa yang valid. Ukuran tiap tipe bergantung pada compiler dan arsitektur prosesor, sehingga C menyediakan operator sizeof untuk memeriksa ukuran secara aktual saat kompilasi.
#include <stdio.h>
#include <limits.h>
int main(void) {
int nilai = 42;
long besar = 9223372036854775807L;
printf("nilai = %d\n", nilai);
printf("besar = %ld\n", besar);
printf("Ukuran int = %zu byte\n", sizeof(int));
printf("Ukuran long = %zu byte\n", sizeof(long));
printf("INT_MAX = %d\n", INT_MAX);
return 0;
}Output yang Dihasilkan:
nilai = 42
besar = 9223372036854775807
Ukuran int = 4 byte
Ukuran long = 8 byte
INT_MAX = 2147483647Mari kita telaah baris-baris kode di atas:
- Baris 2 (
#include <limits.h>): menyertakan header yang mendefinisikan konstanta batas tipe, misalnyaINT_MAX. - Baris 5 (
int nilai = 42;): variabel bertipeintbernamanilaidiisi dengan angka42. - Baris 6 (
long besar = ...;): variabel bertipelongmenampung bilangan yang jauh lebih besar dari batasint; akhiranLmenandakan literal bertipelong. - Baris 8 (
printf("nilai = %d\n", nilai);): format specifier%dmencetakintdalam bentuk desimal bertanda. - Baris 10 (
sizeof(int)): operatorsizeofmenghasilkan jumlah byte tipeintbertipesize_t, yang dicetak memakai format specifier%zu. - Baris 12 (
INT_MAX): konstanta dari headerlimits.hyang menyatakan nilaiintpositif terbesar yang bisa ditampung.
Fungsi sebagai Unit Kerja #
Program C dibangun dari kumpulan fungsi. Setiap fungsi memiliki tipe kembalian, nama, daftar parameter (boleh kosong), dan tubuh fungsi yang dibungkus kurung kurawal. Fungsi main adalah fungsi khusus yang dipanggil sistem operasi saat program dijalankan, sementara fungsi lain harus dipanggil secara eksplisit dari dalam kode.
#include <stdio.h>
/* Fungsi sederhana: menjumlahkan dua bilangan */
int tambah(int a, int b) {
return a + b;
}
int main(void) {
int hasil = tambah(7, 35);
printf("7 + 35 = %d\n", hasil);
return 0;
}Output yang Dihasilkan:
7 + 35 = 42Mari kita telaah baris-baris kode di atas:
- Baris 4 (
int tambah(int a, int b)): deklarasi fungsi bernamatambahyang menerima dua parameterintdan mengembalikanint. - Baris 5 (
return a + b;): menjumlahkan kedua parameter lalu mengembalikan hasilnya ke pemanggil. - Baris 9 (
int hasil = tambah(7, 35);): memanggiltambahdengan argumen7dan35, lalu menyimpan hasil42ke variabelhasil. - Baris 10 (
printf(...)): mencetak hasil dengan format specifier%d.
Mengapa C Masih Relevan #
Banyak bahasa baru bermunculan, tetapi C tetap dipakai pada lapisan yang membutuhkan kinerja tinggi dan kontrol langsung terhadap perangkat keras. Kernel Linux ditulis dalam C; sebagian besar runtime Python, Ruby, dan PHP juga ditulis dalam C; library glibc, SQLite, dan curl semuanya dalam C. Mempelajari C memberi pemahaman tentang bagaimana memori, pointer, dan system call bekerja di balik bahasa-bahasa tingkat tinggi yang biasa kita pakai.