Selamat datang di dunia C! Pada artikel ini akan ditunjukkan bagaimana cara membuat sebuah program C dalam teks, kemudian bagaimana cara mengompilasinya ke dalam bentuk byte yang dapat dijalankan atau dieksekusi.
- 1.1. Perkenalan Singkat Bahasa C
- 1.2. Memasang Compiler C
- 1.3. Menulis Sebuah Program C
- 1.4. Mengompilasi Sebuah Program C [ video ]
- 1.5. Memahami Kompilasi
- 1.6. Ringkasan
Catatan:
- Silahkan Anda mengeklik icon menu untuk berpindah subbagian.
- Video pelengkap dalam tutorial ini akan lebih jelas dilihat dengan resolusi 720p dan mode Full screen.
1.1. Perkenalan Singkat Bahasa C
Bahasa 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 di komputer PDP-11 buatan Digital Equipment Corporation pada 1972.
Bahasa pemrograman tersebut 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. Namun demikian, 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 atau setidaknya sebagian dari C dan ukurannya jauh lebih besar.
Begitu ringkasnya C menjadikannya cocok sebagai bahasa pemula karena ia mudah dipelajari. Untuk ke depan, akan sangat mudah untuk mempelajari bahasa-bahasa baru lainnya sekali saja prinsip-prinsip bahasa C telah dikuasai. Sebagai contoh, bahasa C++ merupakan sebuah ekstensi bahasa C dan seseorang mungkin bisa kesulitan untuk mempelajarinya kecuali Anda telah menguasai pemrograman bahasa C terlebih dahulu.
Terlepas dari fitur-fitur lebih yang tersedia dalam bahasa-bahasa terbaru, bahasa C tetaplah populer karena ia bisa melakukan banyak hal dan begitu efisien. Saat ini, ia digunakan juga pada banyak platform untuk segala hal mulai dari microcontroller 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 Bahasa C
ANSI C menjelaskan sejumlah pustaka standar yang mengandung beberapa fungsi yang sudah diuji coba 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 1. Pustaka-pustaka Standar Bahasa C.
Pustaka | Penjelasan |
---|---|
stdio.h |
Mengandung fungsi-fungsi masukan (input) dan keluaran (output), tipe-tipe dan definisi-definisi makro. Pustaka ini digunakan kebanyakan program C dan mewakili hampir sepertiga keseluruhan pustaka-pustaka C. |
ctype.h |
Mengandung fungsi-fungsi untuk menguji karakter-karakter. |
string.h |
Mengandung fungsi-fungsi untuk memanipulasi kalimat teks (strings). |
math.h |
Mengandung fungsi-fungsi matematis. |
stdlib.h |
Mengandung fungsi-fungsi utilitas untuk konversi bilangan, alokasi penyimpanan, dsb. |
assert.h |
Mengandung sebuah fungsi yang bisa digunakan untuk menambahkan fungsi diagnostik ke dalam sebuah program. |
stdarg.h |
Mengandung sebuah fungsi yang digunakan untuk menjejaki sederet argumen-argumen fungsi. |
setjmp.h |
Mengandung sebuah fungsi yang digunakan untuk menghindari rangkaian panggilan dan kembalian yang wajar. |
signal.h |
Mengandung fungsi-fungsi untuk menangani kondisi-kondisi eksepsional yang kemungkinan muncul dalam sebuah program. |
time.h |
Mengandung fungsi-fungsi untuk memanipulasi komponen-komponen tanggal dan waktu. |
limits.h |
Mengandung definisi-definisi konstanta untuk ukuran tipe-tipe data bahasa C. |
float.h |
Mengandung definisi-definisi konstanta yang berhubungan dengan aritmetika bilangan titik-kambang (floating-point). |
1.2. Memasang Compiler C
Program-program C awalnya dibuat sebagai berkas teks biasa, disimpan dengan ekstensi berkas “.c
”. Ia dapat ditulis dengan menggunakan penyunting atau 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 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 Compiler Collection (GCC) yang tersedia dengan bebas di bawah syarat-syarat General Public License (GPL). Ia diikutsertakan pada hampir semua sistem operasi Linux. GCC digunakan untuk mengompilasi 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 1.2).
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:
- Bukalah sebuah browser web dan kunjungilah halaman proyek MinGW di URL berikut: https://sourceforge.net/projects/mingw.
- Pada halaman proyek MinGW, klik pada tombol Download untuk mengunduh AMI (Automated MinGW Installer) versi terakhir — nama berkasnya berupa
mingw-get-setup.exe
. - Klik ganda AMI yang telah diunduh dan setujui syarat-syarat lisensinya.
- Terima lokasi instalasi yang disarankan di
C:\MinGW
kemudian klik tombolNext
untuk memulai proses pemasangan.
Ketika proses pemasangan sudah selesai maka GCC yang dapat dieksekusi bisa ditemukan di subdirektori C:\MinGW\bin
. Anda bisa menambahkan lokasi ini ke dalam system path sistem operasi Anda sehingga compiler dengan mudah dijalankan dari sembarang direktori.
- Bukalah jendela dialog
Environment Variables
dengan mengeklik iconSystem
padaControl Panel
, kemudian pilihlah tabAdvanced
dan tekan tombolEnvironment Variables
. - 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.
1.3. 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 mengompilasi 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 (C keywords) yang akan dibahas dalam artikel lain seri tutorial 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 ;
(semicolon) 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!
”.
- Bukalah sebuah editor teks biasa, misalnya Notepad pada Windows atau GNU nano pada Linux kemudian ketikkan baris kode pada awal baris:
#include <stdio.h>
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 prapemroses” atau “preprocessor directive” dan harus selalu muncul pada awal baris sebelum kode aktual diproses. - Dua baris setelah instruksi prapemroses, tambahkan sebuah fungsi
main()
kosong.int main() { }
Fungsi ini mendeklarasikan bahwa sebuah nilai bilangan bulat (integer), yaitu tipe data
int
, seharusnya dikeluarkan oleh fungsi tersebut setelah selesai dieksekusi. - Di antara kurung kurawal, tulislah sebuah baris kode yang memanggil salah satu fungsi dalam pustaka standar masukan/keluaran yang disediakan oleh instruksi prapemroses.
printf ( "Hello World!\n" ) ;
Fungsi
printf()
dalam fungsi tersebut mensyaratkan sebuah argumen kalimat tunggal di antara tanda kurungnya. Dalam pemrograman C, kalimat atau untaian karakter (strings) harus diapit dengan tanda petik dua (double quotes). Kalimat tersebut mengandung teksHello World!
dan escape sequence berupa\n
“newline” memindahkan kepala cetak ke marjin kiri pada baris berikutnya. - Masih di dalam tanda kurung kurawal
{}
, masukkan baris kode akhir untuk mengembalikan sebuah bilangan bulat nol, seperti yang disyaratkan oleh deklarasi fungsi.return 0 ;
Pada umumnya, mengeluarkan sebuah nilai nol setelah sebuah program dieksekusi mengindikasikan kepada sistem operasi bahwa program tersebut telah dieksekusi dengan benar.
- Periksalah bahwa kode program sudah tepat sama dengan apa yang ditulis berikut:
#include <stdio.h> int main() { printf( "Hello World!\n" ) ; return 0 ; }
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.
1.4. Mengompilasi 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/user/kode-c/bab-1
. Berkas kode kode-1_bab-1.c
tersebut nantinya menunggu untuk dikompilasi menghasilkan versi format kode byte yang bisa dieksekusi.
- Pada layar perintah ketikkan sebuah perintah
cd
yang diikuti dengan path ke direktori/home/user/kode-c/bab-1
. - Pada direktori
/home/user/kode-c/bab-1
ketikkangcc kode-1_bab-1.c
pada layar perintah kemudian tekan tombolReturn
untuk mengompilasi 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 dinamakana.out
pada sistem Linux dana.exe
pada sistem Windows.Mengompilasi kode C yang berbeda dalam direktori/home/user/kode-c/bab-1
akan menimpa berkas yang sudah ada tanpa peringatan. Itu tentu tidak memuaskan sehingga namanya harus ditentukan ketika mengompilasikode-1_bab-1.c
. Hal tersebut bisa dihindari dengan menyertakan opsi-o
yang diikuti dengan nama yang ditentukan pada perintah compiler. - Pada layar perintah dalam direktori
/home/user/kode-c/bab-1
ketikkangcc kode-1_bab-1.c -o kode-1_bab-1
kemudian tekan tombolReturn
untuk mengompilasi program sekali lagi. Baik pada sistem Linux maupun Windows, sebuah berkas yang dapat dieksekusi bernamakode-1_bab-1
tercipta berdampingan dengan kode berkas C (Gambar 1.3). - Pada layar perintah Windows ketikkan nama berkas yang dapat dieksekusi
*.exe
kemudian tekan tombolReturn
. 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. - Pada layar perintah Linux ketikkan
./kode-1_bab-1
kemudian tekan tombolReturn
untuk menjalankan program maka akan keluar kalimat yang diikuti dengan berpindahnya kursor ke baris berikutnya (Gambar 4).Secara keseluruhan, Anda dapat melihat langkah-langkah tersebut dalam Video 1.1 (silahkan Anda pilih mode Full screen dan resolusi 720p untuk tampilan video yang lebih jelas):
Video 1.1. Menampilkan Teks Sederhana “Hello World!” dalam Bahasa C.
Anda sekarang sudah membuat, mengompilasi, dan mengeksekusi program sederhana Hello World
yang merupakan titik awal Anda dalam mempelajari pemrograman bahasa C. Semua contoh dalam artikel lanjutan nantinya akan dibuat, dikompilasi, dan dieksekusi dengan cara yang sama.
1.5. 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:
- Prapemrosesan (preprocessing)
Prapemroses mengganti semua instruksi prapemroses dalam berkas kode “.c
” dengan kode pustaka aktual yang menerapkan instruksi-instruksi tersebut. Sebagai contoh, kode pustaka disubstitusikan untuk instruksi#include
. Berkas yang dihasilkan mengandung substitusi-substitusi berwujud teks dan memiliki ekstensi berkas “.i
“. - 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 memiliki ekstensi berkas “.s
“. - Perakitan (assembling)
Assembler mengubah instruksi teks bahasa mesin dalam berkas “.s
” menjadi kode mesin. Obyek konversi yang dihasilkan berbentuk biner dan berkasnya berekstensi “.o
“. - Pentautan (linking)
Linker menggabungkan satu atau lebih obyek biner berkas “.o
” ke dalam sebuah berkas tunggal yang dapat dieksekusi. Berkas biner yang dihasilkan 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 sisi lain, bisa beroperasi pada beberapa berkas objek dan menghasilkan sebuah berkas biner. Hal tersebut mengizinkan dibuatnya program besar dari berkas-berkas objek 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 objek maka ia akan melaporkan sebuah kesalahan dan berkas yang dapat dieksekusi tidak dibuat.
Berkas-berkas sementara yang dibuat pada tengah tahapan proses kompilasi secara otomatis dihapus, namun berkas tersebut bisa diperoleh untuk keperluan inspeksi dengan mengikutsertakan opsi -save-temps
dalam perintah compiler.
- Pada sebuah layar perintah dalam direktori
/home/user/kode-c/bab-1
, ketikkangcc kode-1_bab-1.c -save-temps -o kode-1_bab-1
kemudian tekanReturn
atauEnter
untuk melakukan kompilasi ulang pada program dan menyimpan berkas-berkas sementara (Gambar 1.5). - Bukalah berkas
kode-1_bab-1.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 pustakastdio.h
. - Sekarang bukalah berkas
kode-1_bab-1.s
dengan editor teks yang sama untuk melihat terjemahannya ke dalam bahasa tingkat rendah kode assembly dan Anda dapat melihat bahwa kode yang ada di dalamnya sudah begitu sulit dibaca oleh kita dibandingkan kode versi C-nya (Gambar 1.6).
1.6. Ringkasan
- ANSI (American National Standards Institute) meletakkan dasar standar yang diakui untuk bahasa pemrograman C.
- Bahasa pemrograman lain, seperti misalnya C++ dan C# sebagian diturunkan dari bahasa C.
- Bahasa C memiliki sejumlah pustaka standar berisi fungsi-fungsi yang sudah diuji coba dan bisa digunakan di program C apa saja.
- Pustaka-pustaka C terkandung dalam berkas header yang berkasnya berekstensi “
.h
“. - Program-program C dibuat sebagai sebuah teks biasa yang berkasnya memiliki ekstensi “
.c
“. - Compiler populer GNU C Compiler (GCC) diikutsertakan dalam paket Minimalist GNU for Windows (MinGW).
- Menambahkan direktori sarang compiler ke dalam system path menjadikan compiler dapat dijalankan dari sembarang direktori.
- Program-program memiliki sebuah atau lebih dari satu fungsi yang berisi pernyataan-pernyataan yang dieksekusi saat fungsi dipanggil.
- Setiap program C harus memiliki sebuah fungsi
main()
. - Sebuah deklarasi fungsi diawali dengan menentukan tipe data nilai yang dikeluarkan setelah fungsi tersebut dieksekusi.
- Pernyataan-pernyataan yang dieksekusi diletakkan di dalam kurung kurawal
{ }
dan setiap pernyataan harus diakhiri dengan sebuah tanda titik koma;
. - Instruksi-instruksi prapemroses (preprocessor) diimplementasikan dalam kompilasi program tahap pertama dan akan mensubstitusikan kode pustaka.
- GNU C Compiler dijalankan dengan perintah
gcc
dan bisa mengikutsertakan sebuah opsi-o
untuk memberikan nama berkas keluaran. - Berkas-berkas yang sifatnya dibuat sementara (temporary files) selama proses kompilasi bisa diperoleh dengan menggunakan opsi
-save-temps
pada perintah compiler.
Daftar Pustaka
- Kernighan, Brian W. & Ritchie, Dennis M. (1988). The C Programming Language. New Jersey: Prentice Hall.
- Griffiths, David & Griffiths, Dawn (2012). Head First C. California: O’Reilly.
- McGarth, Mike (2012). C Programming: Grasp the Nuts and Bolts of Programming. Warwickshire: In Easy Steps Ltd.
- Stevanovic, Milan (2014). Advanced C and C++ Compiling: An Engineering Guide to Compiling, Linking, and Libraries using C and C++. California: Apress.