I. Pengertian C
Bahasa C adalah bahasa pemrograman serbaguna yang diciptakan pada tahun 1972 untuk sistem operasi UNIX. Sistem operasi itu sendiri dan sebagian besar perangkat lunak pendampingnya ditulis dengan C. Namun, bahasa ini tidak terikat hanya pada UNIX dan dapat digunakan di komputer atau sistem apapun. Sering disebut sebagai “bahasa pemrograman sistem”, ia dapat digunakan untuk membangun sistem operasi dan kompiler, serta berbagai jenis perangkat lunak umum.
C berasal dari bahasa B (turunan dari BCPL). Baik B maupun BCPL adalah bahasa tanpa tipe data, sedangkan C memiliki sistem tipe data yang lengkap.
II. Fitur Utama
1) Ragam Tipe Data yang Lengkap
Dibandingkan dengan pendahulunya yaitu bahasa B, C menyediakan berbagai macam tipe data.
Tipe dasar: karakter, bilangan bulat dengan berbagai ukuran, bilangan titik mengambang (desimal)
Tipe turunan: pointer, array, struktur, dan uni. Pointer memungkinkan manipulasi alamat memori secara langsung tanpa bergantung pada arsitektur perangkat keras.
Aturan: Operator dapat digabungkan menjadi ekspresi; ekspresi seperti penugasan atau pemanggilan fungsi dapat berdiri sendiri sebagai satu perintah program utuh.
2) Kontrol Alur Program yang Lengkap
Mendukung cabang bersyarat (if-else), pemilihan banyak jalur (switch), dua jenis perulangan (while/for cek syarat sebelum eksekusi, do cek syarat setelah eksekusi), keluar awal dari perulangan (break), dan lainnya. Perintah kontrol alur ini membuat logika program menjadi beragam dan lengkap.
3) Fungsi
Fungsi adalah sekumpulan langkah operasi tetap yang dikemas dalam satu nama. Berikan nama padanya, lalu cukup panggil nama tersebut saat dibutuhkan, seluruh rangkaian langkah akan berjalan otomatis.
Contoh dari kehidupan sehari-hari:
Misalkan “panggang roti” adalah sebuah fungsi.
Tidak perlu menuliskan ulang seluruh proses setiap kali ingin membuat roti: uleni adonan → bentuk roti → panggang di oven.
Cukup panggil “panggang roti”, semua langkah akan berjalan otomatis; tindakan ini disebut memanggil fungsi.
Jika ingin memanggang roti dua kali, tinggal panggil fungsi “panggang roti” sebanyak dua kali.
Jika diterapkan ke bahasa C:
Fungsi
printfsudah berisi semua prosedur untuk menampilkan teks ke layar. Anda hanya perlu menulisprintf("Halo"), tanpa mengatur layar komputer langkah demi langkah secara manual.
Fungsi dapat mengembalikan semua jenis data: bilangan bulat, struktur, pointer, dan lainnya.
Mendukung pemanggilan rekursif (fungsi memanggil dirinya sendiri). Variabel lokal di dalam fungsi dibuat ulang setiap kali fungsi dipanggil; fungsi tidak boleh didefinisikan bersarang di dalam fungsi lain, namun variabel dapat dideklarasikan di dalam blok kode terpisah.
Kode sumber proyek dapat dibagi menjadi beberapa berkas .c dan dikompilasi secara terpisah.
Variabel memiliki tiga cakupan akses: hanya di dalam satu fungsi, global hanya dalam satu berkas sumber, atau dapat diakses di seluruh program.
4) Preprosesor
Sebelum kompilasi dijalankan, preprosesor akan menjalankan tugas awal: penggantian teks massal melalui makro, impor berkas kode luar, kompilasi bersyarat untuk sebagian segmen kode.
Preprosesor menangani perintah yang bukan bagian dari sintaks inti bahasa C sebelum kompilasi sesungguhnya. Alat tambahan ini dibuat untuk mempermudah pengembangan dan meningkatkan efisiensi, terutama melalui makro. Kita akan jelaskan secara mendalam di bab selanjutnya.
III. Bahasa Tingkat Rendah yang Sederhana
Istilah “tingkat rendah” di sini tidak bermakna negatif. C hanya memproses elemen dasar asli komputer: karakter, nilai bilangan, dan alamat memori, serta menggunakan logika aritmatika bawaan perangkat keras sehingga kecepatan eksekusinya sangat tinggi.
Dengan kata lain, ia dapat mengakses bagian internal komputer yang lebih dalam. Dibanding banyak bahasa lain, C memberikan akses langsung ke alamat memori bahkan perangkat keras.
Fitur Asli Bahasa Sangat Minimal, Kemampuan Kompleks Diwujudkan Melalui Pustaka
Bahasa C tidak memiliki dukungan bawaan untuk string, array, koleksi, operasi baca tulis berkas, input output:
Tidak bisa memanipulasi satu string atau array secara utuh dalam satu operasi; hanya struktur yang mendukung penyalinan seluruh isi.
Tidak ada manajemen memori otomatis atau pengumpul sampah; memori harus dikelola secara manual oleh pengembang.
Tidak ada kata kunci bawaan read/write; mencetak teks atau membaca input keyboard semuanya dilakukan dengan memanggil fungsi pustaka.
Hanya mendukung alur eksekusi single-thread dasar, tidak ada dukungan asli untuk multitugas, operasi paralel, sinkronisasi, atau coroutine.
Pustaka adalah kumpulan fungsi yang sudah ditulis orang lain menggunakan C atau bahasa lain. Pengembang dapat memanggil fungsi pustaka ini untuk membuat fitur tanpa menulis ulang fungsi dasar dari awal.
Meskipun banyak fitur perlu dipanggil lewat pustaka, bahasa itu sendiri ringkas dengan sedikit aturan sehingga mudah dipelajari dan dapat dikuasai secara penuh oleh pengembang.
IV. Standarisasi Bahasa C: ANSI C (1988)
Standarisasi menjadi kebutuhan karena saat C mulai populer, banyak pengembang dan perusahaan membuat variasi bahasa masing-masing sehingga tidak ada aturan seragam. Dibentuk lembaga khusus untuk membuat peraturan universal yang seragam, mirip standar port USB atau stopkontak listrik.
ANSI = American National Standards Institute
Penjelasan
American National Standards Institute adalah organisasi standarisasi swasta asal Amerika Serikat. Ia tidak membuat perangkat lunak atau menulis kode sumber, melainkan membuat spesifikasi seragam untuk semua industri: manufaktur, elektronik, komputer, dan bahasa pemrograman.
Apa itu ANSI C?
Pada tahun 1983, ANSI membentuk komite untuk menyeragamkan sintaks bahasa C, pada akhir tahun 1988 diterbitkan spesifikasi resmi pertama bahasa ini yang dikenal dengan nama ANSI C (juga disebut C89).
V. Pelengkap Standar ANSI: Pustaka Standar
Standar ini memperkenalkan pustaka standar seragam yang menyediakan utilitas lintas platform untuk akses berkas, input output terformat, alokasi memori, manipulasi string, dan lainnya, dapat diakses melalui berkas header standar.
Sintaks inti bahasa C sengaja dibuat minimalis, hanya mencakup elemen dasar seperti variabel, percabangan, perulangan, fungsi, pointer. Ia tidak memiliki fitur bawaan asli untuk mencetak teks, membaca input keyboard, mengelola berkas, perhitungan matematika, atau manipulasi string.
Spesifikasi ANSI C menetapkan kumpulan fungsi utilitas universal yang kompatibel dengan semua kompiler di seluruh sistem operasi, kumpulan alat ini disebut Pustaka Standar.
Cara penggunaan: pengembang mengimpor berkas header dengan sintaks #include nama_berkas.h.
Contoh:
#include <stdio.h> // Pustaka Input Output: printf (cetak teks), scanf (baca input pengguna)
#include <stdlib.h> // Alokasi memori, keluar program, pembangkit bilangan acak
#include <string.h> // Salin dan bandingkan string karakter
#include <math.h> // Fungsi matematika seperti sin(), sqrt()Code language: HTML, XML (xml)
Sebelum ada standar ANSI, fungsi cetak bekerja berbeda di UNIX dan Windows sehingga kode akan error saat dipindahkan antar sistem. Setelah pustaka standar muncul, kode seperti printf("hello") dapat berjalan sama persis di Windows, Linux, macOS tanpa perubahan apapun. Hal ini sangat meringankan beban pengembang dan mempercepat penyebaran bahasa C ke seluruh dunia.
Dengan bahasa apa pustaka standar dikembangkan?
Sebagian besar fitur pustaka diimplementasikan dengan bahasa C, sebagian kecil menggunakan assembly dan bahasa tingkat rendah lainnya.
Fungsi yang tidak berinteraksi langsung dengan perangkat keras atau sistem operasi, seperti fungsi salin string strcpy, perhitungan matematika, salinan blok memori hampir seluruhnya ditulis dengan C murni.
Operasi yang berinteraksi langsung dengan perangkat keras atau inti sistem operasi tidak dapat dibuat hanya dengan C saja, memerlukan bahasa pendukung tingkat rendah terutama assembly.
VI. Portabilitas dan Keamanan Tipe Data
Kode sumber yang sama dapat dikompilasi dan dijalankan di berbagai sistem operasi dengan sedikit atau tanpa modifikasi sama sekali.
Setelah membaca pengantar ini, Anda seharusnya sudah memiliki pemahaman dasar tentang bahasa C. Jika masih ada konsep yang kurang jelas jangan khawatir, penjelasan hanya berupa teks sulit dipahami. Di bab selanjutnya kita akan bahas setiap topik dengan contoh kode praktis agar pemahaman semakin mantap.