Bagian 1: Mengenal dan Memulai Membuat Program Sederhana dalam Bahasa C

Belajar Bahasa C Belajar Bahasa C

C merupakan sebuah bahasa pemrograman komputer yang ringkas untuk tujuan-tujuan umum yang pada awalnya dikembangkan oleh Dennis MacAlistair Ritchie untuk sistem operasi Unix. Bahasa ini diimplementasikan pertama kali pada komputer PDP-11 buatan Digital Equipment Corporation pada 1972.

Gambar 1. Dennis Ritchie di Japan Prize Foundation pada 2011 (© Wikimedia).
Gambar 1. Dennis Ritchie di Japan Prize Foundation pada 2011 (© Wikimedia).

Bahasa pemrograman baru ini dinamakan “C” yang tak lain merupakan kelanjutan dari bahasa pemrograman terdahulu yaitu bahasa “B” yang diperkenalkan pada sekitar 1970.

Sistem operasi Unix dan hampir semua aplikasinya ditulis dalam bahasa C. Bagaimanapun, C tidak dibatasi oleh platform tertentu dan program dapat dibuat pada mesin mana saja yang mendukung C, termasuk diantaranya yang menjalankan platform Windows.

Fleksibilitas dan portabilitas C membuatnya sangat populer dan bahasa tersebut dibakukan pada 1989 oleh ANSI (American National Standards Institute). Standar ANSI menjelaskan tanpa ambiguitas setiap aspek C, meniadakan ketidakpastian tentang sintaks yang tepat terkait bahasa tersebut. ANSI C telah dikenal sebagai standar untuk bahasa C dan dijelaskan serta akan ditunjukkan dalam contoh-contoh pada artikel ini.

Mengapa belajar pemrograman bahasa C?

Bahasa C telah dikenal hingga saat ini seiring dengan diperkenalkannya bahasa-bahasa pemrograman yang baru seperti Java, C++, dan C#. Kebanyakan bahasa baru tersebut diturunkan, setidaknya sebagian, dari C dan ukurannya jauh lebih besar.

Begitu ringkasnya C menjadikannya cocok sebagai bahasa pemula karena ia mudah dipelajari. Ke depannya akan sangat mudah untuk mempelajari bahasa-bahasa baru lainnya sekali saja prinsip-prinsip bahasa C telah dikuasai. Sebagai contoh, C++ merupakan sebuah perluasan C dan seseorang mungkin bisa kesulitan untuk mempelajarinya kecuali Anda telah menguasai pemrograman C terlebih dahulu.

Terlepas dari fitur-fitur lebih yang tersedia dalam bahasa-bahasa terbaru, C tetaplah populer karena ia bisa melakukan banyak hal dan efisien. Saat ini, ia digunakan pada banyak platform untuk segala hal mulai dari micro-controller hingga pada banyak sistem ilmiah yang paling maju. Para pemrogram di seluruh dunia menyarankan penggunaannya karena ia memperbolehkan kendali dan efisiensi maksimal dalam program-program mereka.

Pustaka-pustaka Standar C

ANSI C menjelaskan sejumlah pustaka standar yang mengandung beberapa fungsi yang sudah dicoba dan diuji serta bisa digunakan dalam program-program C Anda. Pustaka-pustaka ada dalam berkas “header” yang masing-masingnya memiliki ekstensi berkas “.h”.

Nama-nama berkas header pustaka standar C disebutkan dalam daftar berikut dengan sebuah penjelasan mengenai kegunaannya:

Tabel Berkas Header Pustaka C Standar

Berkas HeaderDeskripsi
stdio.hMengandung fungsi masukan dan keluaran, types, dan penjelasan-penjelasan macro. Pustaka ini digunakan oleh kebanyakan program C dan mewakili hampir sepertiga dari keseluruhan pustaka C.
ctype.hMengandung fungsi-fungsi untuk menguji karakter-karakter.
string.hMengandung fungsi-fungsi untuk memanipulasi kalimat atau strings.
math.hMengandung fungsi-fungsi matematis.
stdlib.hMengandung fungsi-fungsi utilitas untuk konversi bilangan, alokasi penyimpanan, dsb.
assert.hMengandung sebuah fungsi yang digunakan untuk menambahkan diagnostik pada sebuah program.
stdarg.hMengandung sebuah fungsi yang digunakan untuk berpindah dalam sebuah daftar argumen-argumen fungsi.
setjmp.hMengandung sebuah fungsi yang digunakan untuk menghindari panggilan normal dan serangkai kembalian.
signal.hMengandung fungsi-fungsi untuk menangani kondisi-kondisi eksepsional yang mungkin muncul dalam sebuah program.
time.hMengandung fungsi-fungsi untuk memanipulasi komponen tanggal dan waktu.
limits.hMengandung definisi konstan untuk ukuran jenis data C.
float.hMengandung definisi konstan yang berhubungan dengan aritmetik floating-point.

Memasang Sebuah Compiler C

Program-program C awalnya dibuat sebagai berkas teks biasa, disimpan dengan ekstensi berkas “.c”. Ia dapat ditulis dengan menggunakan editor teks biasa seperti misalnya aplikasi Windows Notepad tanpa membutuhkan perangkat lunak khusus.

Untuk mengeksekusi sebuah program C maka ia harus dikompilasi terlebih dahulu menjadi kode byte yang bisa dimengerti oleh komputer.

Sebuah compiler C membaca versi teks asli program dan menerjemahkannya menjadi berkas kedua, yang berupa format byte yang dapat dieksekusi dan dibaca oleh mesin. Apabila program teks mengandung kesalahan-kesalahan sintaks maka hal tersebut akan dilaporkan oleh compiler dan berkas yang dapat dieksekusi tidak akan dibuat.

Salah satu compiler C yang paling populer adalah GNU C Compiler (GCC) yang tersedia dengan bebas di bawah syarat-syarat General Public License (GPL). Ia diikutsertakan pada hampir semua sistem operasi Linux. GCC digunakan untuk mengkompilasi semua contoh dalam artikel ini ke dalam kode byte yang dapat dieksekusi.

Untuk mengetahui apabila Anda sudah memiliki GCC dalam sistem Anda silahkan mengetikkan gcc -v pada layar perintah atau command prompt. Bila tersedia maka compiler akan memberi respon berupa informasi mengenai versinya (Gambar 2).

Memperoleh informasi versi GCC dalam layar perintah.
Gambar 2. Memperoleh informasi versi GCC dalam layar perintah.

Apabila Anda menggunakan sistem operasi Linux dan GCC tidak tersedia maka pasanglah dari CD atau repositori daring, atau mintalah kepada administrator sistem untuk memasangnya.

Jika Anda menggunakan sistem operasi Windows dan GCC belum tersedia maka Anda dapat mengunduh dan memasang paket MinGW (Minimalist GNU for Windows) yang mengikutsertakan GCC dengan mengikuti langkah berikut:

  1. Bukalah sebuah browser web dan kunjungilah halaman proyek MinGW di URL berikut: http://sourceforge.net/projects/mingw.
  2. Pada halaman proyek MinGW, klik pada tombol Download untuk mengunduh AMI (Automated MinGW Installer) versi terakhir — nama berkasnya berupa mingw-get-setup.exe.
  3. Klik ganda AMI yang telah diunduh dan setujui syarat-syarat lisensinya.
  4. Terima lokasi instalasi yang disarankan di C:\MinGW kemudian klik tombol Next untuk memulai proses pemasangan.

Ketika proses pemasangan sudah selesai maka GCC yang dapat dieksekusi bisa ditemukan di sub direktori C:\MinGW\bin. Anda bisa menambahkan lokasi ini kedalam system path Anda sehingga compiler dengan mudah dijalankan dari sembarang direktori dalam sistem Anda.

  1. Bukalah jendela dialog Environment Variables dengan mengeklik icon System pada Control Panel, kemudian pilihlah tab Advanced dan tekan tombol Environment Variables.
  2. Temukan variabel Path kemudian ubahlah baris pernyataan akhirnya dengan menambahkan ;C:\MinGW\bin;.

Untuk menguji ketersediaan GCC pada layar perintah ketikkan gcc -v kemudian tekan tombol Return atau Enter untuk melihat tanggapan compiler berupa informasi versinya.

Menulis Sebuah Program C

Dalam program-program C, pernyataan-pernyataan kode yang dieksekusi berada dalam wadah “fungsi-fungsi”, yang didefinisikan menggunakan format sintaks berikut:

tipe-data nama-fungsi () { pernyataan-yang-dieksekusi }

Setelah sebuah fungsi dipanggil dalam sebuah eksekusi pernyataannya, ia akan mengembalikan sebuah nilai kepada pemanggil (caller). Nilai tersebut harus berupa tipe data yang telah ditentukan di sebelum nama fungsinya.

Sebuah program bisa berisi satu atau banyak fungsi namun harus selalu memiliki sebuah fungsi yang dinamakan “main”. Fungsi main() merupakan titik awal semua program C dan compiler C tidak akan mengkompilasi kode kecuali ia menemukan sebuah fungsi main() dalam program.

Fungsi-fungsi lain dalam sebuah program boleh diberi nama sembarang yang Anda sukai menggunakan huruf, angka, dan karakter garis bawah namun nama tersebut tidak boleh dimulai dengan sebuah angka. Begitu juga kata kunci C yang ada dalam artikel lain pelajaran ini harus dihindari.

Isi dalam tanda kurung () setelah nama fungsi boleh mengandung nilai-nilai masukan yang digunakan oleh fungsi tersebut. Nilai-nilai yang dimaksud mengambil bentuk sebuah daftar yang dipisahkan oleh tanda koma dan dikenal sebagai “argumen-argumen” fungsi.

Tanda kurung kurawal {} mengandung pernyataan-pernyataan yang dieksekusi ketika fungsi tersebut dipanggil. Setiap pernyataan harus diakhiri dengan sebuah tanda titik-koma ; (semi-colon) sama seperti setiap kalimat tulisan yang pada umumnya diakhiri dengan tanda titik.

Menurut tradisi yang umum, program pertama yang dibuat ketika mempelajari sembarang bahasa pemrograman adalah mencoba untuk menampilkan pesan sederhana “Hello World!”.

  1. Bukalah sebuah editor teks biasa, misalnya Notepad pada Windows atau GNU nano pada Linux kemudian ketikkan baris kode pada awal baris:

    Program dimulai dengan sebuah instruksi kepada compiler C untuk mengikutsertakan informasi dari masukan/keluaran standar pada berkas pustaka stdio.h. Itu membuat fungsi-fungsi dalam pustaka tersebut tersedia untuk digunakan dalam program ini. Instruksi tersebut disebut sebagai sebuah “instruksi pra-pemroses” atau “preprocessor directive” dan harus selalu muncul pada awal baris sebelum kode aktual diproses.
  2. Dua baris setelah instruksi pra-pemroses, tambahkan sebuah fungsi utama kosong.

    Fungsi ini mendeklarasikan bahwa sebuah nilai bilangan bulat (integer), yaitu tipe data int, seharusnya dikeluarkan oleh fungsi tersebut setelah selesai dieksekusi.
  3. Di antara kurung kurawal, tulislah sebuah baris kode yang memanggil salah satu fungsi dalam pustaka standar masukan/keluaran yang disediakan oleh instruksi pra-pemroses.

    Fungsi printf() dalam fungsi tersebut mensyaratkan sebuah argumen kalimat tunggal di antara tanda kurungnya. Dalam pemrograman C, kalimat (strings) harus diapit dengan tanda petik-dua (double quotes). Kalimat tersebut mengandung teks Hello World! dan escape squence berupa \nnewline” memindahkan kepala cetak ke marjin kiri pada baris berikutnya.
  4. Masih di dalam tanda kurung kurawal, masukkan baris kode akhir untuk mengembalikan sebuah bilangan bulat nol, seperti yang dibutuhkan oleh deklarasi fungsi.

    Pada umumnya, mengeluarkan sebuah nilai nol setelah sebuah program dieksekusi mengindikasikan kepada sistem operasi bahwa program tersebut telah dieksekusi dengan benar.
  5. Periksalah bahwa kode program sudah tepat sama dengan apa yang ditulis berikut:

Program lengkap dalam format teks tersebut sekarang sudah siap untuk dikompilasi ke dalam format byte yang dapat dibaca oleh mesin menjadi sebuah berkas yang nantinya dapat dieksekusi.

Mengkompilasi Sebuah Program C

Berkas kode (source code) C untuk contoh-contoh dalam artikel ini disimpan dalam sebuah direktori dan untuk artikel ini penulis menyimpannya pada sistem operasi Linux di /home/server/KodeC. Berkas kode hello.c tersebut nantinya menunggu untuk dikompilasi menghasilkan versi format kode byte yang bisa dieksekusi.

  1. Pada layar perintah ketikkan sebuah perintah cd yang diikuti dengan path ke direktori KodeC.
  2. Pada direktori KodeC ketikkan gcc hello.c pada layar perintah kemudian tekan tombol Return untuk mengkompilasi program.Saat kompilasi tersebut berhasil maka compiler membuat sebuah berkas yang dapat dieksekusi di dalam direktori yang sama dengan berkas kode. Secara bawaan, berkas tersebut akan dinamakan a.out pada sistem Linux dan a.exe pada sistem Windows. Mengkompilasi kode C yang berbeda dalam direktori KodeC akan menimpa berkas yang sudah ada tanpa peringatan. Itu tentu tidak memuaskan sehingga namanya harus ditentukan ketika mengkompilasi hello.c. Itu bisa dilakukan dengan menyertakan opsi -o yang diikuti dengan nama yang ditentukan pada perintah compiler.
  3. Pada layar perintah dalam direktori KodeC ketikkan gcc hello.c -o hello.exe kemudian tekan tombol Return untuk mengkompilasi program sekali lagi.Baik pada sistem Linux maupun Windows, sebuah berkas yang dapat dieksekusi bernama hello.exe tercipta berdampingan dengan kode berkas C (Gambar 2).
  4. Pada layar perintah Windows ketikkan nama berkas yang dapat dieksekusi *.exe kemudian tekan tombol Return. Kalimat teks merupakan keluaran dan kursor ketik akan berpindah ke baris berikutnya.Sedangkan pada Linux karena sistem Linux secara bawaan tidak mencari di direktori saat ini untuk berkas yang bisa dieksekusi, kecuali diarahkan secara spesifik maka diperlukan prefiks pada nama berkasnya berupa ./ untuk mengeksekusi program.
  5. Pada layar perintah Linux ketikkan ./hello.exe kemudian tekan tombol Return untuk menjalankan program maka akan keluar kalimat yang diikuti dengan berpindahnya kursor ke baris berikutnya (Gambar 3).
Mengeksekusi hello.exe pada sistem Linux.
Gambar 3. Mengeksekusi hello.exe pada sistem Linux.

Anda sekarang sudah membuat, mengkompilasi, dan mengeksekusi program sederhana Hello World yang merupakan titik awal Anda dalam mempelajari pemrograman bahasa C. Semua contoh dalam artikel ini nantinya akan dibuat, dikompilasi, dan dieksekusi dengan cara yang sama.

Memahami Kompilasi

Dalam menghasilkan sebuah berkas yang dapat dieksekusi dari sebuah berkas kode C, proses kompilasi sebenarnya menjalani empat tahapan yang terpisah dengan masing-masingnya menghasilkan sebuah berkas baru:

  1. Pra-pemrosesan (preprocessing)
    Pra-pemroses mengganti semua instruksi pra-pemroses dalam berkas kode “.c” dengan kode pustaka aktual yang menerapkan instruksi-instruksi tersebut. Sebagai contoh, kode pustaka disubstitusikan untuk instruksi #include. Berkas yang dihasilkan dan mengandung substitusi-substitusi berwujud teks dan memiliki ekstensi berkas “.i“.
  2. Penerjemahan (translating)
    Compiler menerjemahkan instruksi-instruksi tingkat tinggi dalam berkas “.i” ke instruksi bahasa tingkat rendah yaitu bahasa mesin atau assembly. Berkas translasi yang dihasilkan berupa teks dan umumnya memiliki ekstensi berkas “.s“.
  3. Perakitan (assembling)
    Assembler mengubah instruksi teks bahasa mesin dalam berkas “.s” menjadi kode mesin. Obyek konversi yang dihasilkan berbentuk biner dan umumnya berkasnya berkestensi “.o“.
  4. Pentautan (linking)
    Linker menggabungkan satu atau lebih obyek biner berkas “.o” ke dalam sebuah berkas tunggal yang dapat dieksekusi. Berkas biner yang dihasilkan biasanya memiliki ekstensi .exe pada sistem Windows.

Boleh dikatakan bahwa “kompilasi” yang dijelaskan pada tiga tahapan pertama di atas yang beroperasi pada sebuah berkas kode tunggal secara pasti menghasilkan berkas obyek biner tunggal. Saat kode program mengandung kesalahan-kesalahan sintaks, misalnya tidak terdapat sebuah tanda titik-koma sebagai penutup pernyataan atau lupa menutup dengan tanda kurung maka hal tersebut akan dilaporkan oleh compiler dan kompilasi akan gagal.

Linker, di lain sisi, bisa beroperasi pada banyak berkas obyek dan menghasilkan sebuah berkas biner. Hal tersebut mengijinkan dibuatnya program besar dari berkas-berkas obyek yang berupa modul yang bisa jadi masing-masingnya mengandung fungsi-fungsi yang bisa digunakan ulang. Ketika linker menemukan fungsi dengan nama yang sama dalam beberapa berkas obyek maka ia akan melaporkan sebuah kesalahan dan berkas yang dapat dieksekusi tidak dibuat.

Normalnya, berkas-berkas sementara yang dibuat pada tengah tahapan proses kompilasi secara otomatis dihapus, namun berkas tersebut bisa diperoleh untuk inspeksi dengan mengikutsertakan opsi -save-temps dalam perintah compiler.

  1. Pada sebuah layar perintah dalam direktori KodeC, ketikkan gcc hello.c -save-temps -o hello.exe kemudian tekan Return untuk melakukan kompilasi ulang pada program dan menyimpan berkas-berkas sementara (Gambar 4).
  2. Bukalah berkas hello.i dengan menggunakan editor teks biasa, misalnya Notepad pada sistem Windows atau GNU nano pada sistem Linux yang penulis gunakan, untuk melihat kode C yang Anda tulis berada pada bagian akhir berkas yang di atasnya sudah disubstitusi dengan kode pustaka stdio.h.
  3. Sekarang bukalah berkas hello.s dengan editor teks yang sama untuk melihat terjemahannya ke dalam bahasa tingkat rendah kode assembly dan Anda dapat melihat betapa kode yang ada di dalamnya sudah begitu sulit dibaca oleh kita dibandingkan kode versi C-nya (Gambar 5).
Gambar 4. Isi direktori KodeC setelah kompilasi gcc menyertakan opsi -save-temps.
Gambar 4. Isi direktori KodeC setelah kompilasi gcc menyertakan opsi -save-temps.
Gambar 5. Isi berkas hello.s yang merupakan terjemahan kode C menjadi bahasa assembly.
Gambar 5. Isi berkas hello.s yang merupakan terjemahan kode C menjadi bahasa assembly.

Facebook Comments