IPS belajar dan berbagi

Memulai pemrograman dengan C/C++

Proses kompilasi source code menjadi dll/exe.

Proses kompilasi

(/ips)

Dasar-dasar pemrograman

Tidak ada seorangpun didunia ini langsung menjadi seorang ahli tanpa melalui tahapan pemula, tak terkecuali di bidang pemrograman. Untuk menjadi seorang ahli (expert) khususnya pada bidang pemrograman, haruslah menjalani tahapan pemula tersebut dengan benar yaitu melalui pemahaman terhadap konsep-konsep dasar dengan benar, rajin membaca, belajar dan berlatih dengan sabar ([1]/[2]), serta melatih kreativitas dengan cara pengembangan lebih lanjut (walaupun pengembangannya hanya sedikit) terhadap solusi dari soal-soal/permasalahan sederhana yang telah berhasil dipecahkan.

Seringkali, pada tahapan pemula, seseorang tergesa-gesa ingin membuat suatu aplikasi yang "keren", padahal konsep dasar dari pemrograman belum dikuasai dengan benar. Hal ini saya rasakan setelah mengamati berbagai posting di milis/forum/group facebook yang terkait dengan pemrograman, dimana seringkali muncul pertanyaan-pertanyaan (oleh pemula yang baru memulai pemrograman) seperti "ajarin dong cara memprogram GUI di bahasa C++, bagaimana membuat program yang terkoneksi dengan database di bahasa ..." dan lain sebagainya. Saya katakan tergesa-gesa karena misalnya untuk memprogram GUI di C++ harus paham dulu konsep-konsep mengenai library/pustaka (karena C++ tidak punya pustaka standar untuk GUI), event, event handler, jenis-jenis control, API (application programming interface) dari pustaka yang digunakan, dan masih banyak lagi konsep lainnya, dan hal-hal tersebut tidak bisa dijelaskan dan dipahami hanya dengan beberapa kalimat/paragraf.

Pada tulisan kali ini, akan coba dipaparkan mengenai konsep-konsep paling mendasar pada bahasa pemrograman khususnya bahasa pemrograman tingkat tinggi. Tulisan ini terinspirasi dan banyak mengutip artikel [3].

Apa itu pemrograman?

Banyak orang pasti tahu bahwa pemrograman merupakan aktifitas untuk membuat aplikasi seperti game, kalkulator, pengolah gambar, web, dan sebagainya (secara umum kita sebut program), dan orang yang melakukan pemrograman disebut programer. Seorang programer seharusnya bukan hanya seseorang yang mampu mengetikkan perintah-perintah (terlebih lagi hanya copy-paste) dengan bahasa pemrograman tertentu, akan tetapi dituntut untuk mampu menganalisis dan menyodorkan solusi terhadap suatu permasalahan (problem solving).

Bagian problem solving ini merupakan bagian tersulit, memerlukan pengalaman dan tidak ada seorangpun yang tahu semua solusi terhadap suatu permasalahan serta seringkali untuk suatu permasalahan ada banyak cara untuk memecahkannya. Tidak memahami dan hafal semua solusi merupakan hal yang wajar, akan tetapi memahami konsep dasar pemrograman, menerapkan konsep tersebut pada suatu permasalahan, mampu mencari dan mempelajari solusi terbaik dari permasalahan tersebut merupakan kunci sukses menjadi seorang programer. Seorang programer harus mampu menghadapi tantangan yang ada didepannya, memecah-mecah tantangan tersebut menjadi komponen-komponen dasar serta merangkaikan komponen-kompnen tersebut menjadi suatu solusi yang efisien. Janganlah mudah menyerah jika belum tahu bagaimana menyelesaiakannya, jangan patah arang jika program yang dibuat tidak jalan sesuai dengan keinginan, melainkan berusahalah untuk mencari tahu kenapa hal tersebut tidak berjalan serta berusahalah untuk terus mencari solusi yang lebih baik.

Komponen dasar pemrograman

Pada hakekatnya, sebuah program itu memerlukan masukan berupa data (baik secara langsung maupun tidak langsung), memproses data tersebut menjadi bentuk lain, serta menyajikannya sebagai suatu keluaran (output). Singkatnya, dalam setiap program pasti ada data dan proses pengolahan data. Oleh karena itu, konsep dasar yang paling pertama dan merupakan bagian terpenting adalah bagaimana menangani/mengingat/menyimpan data tersebut dalam program yang dibuat.


Variabel

Variabel merupakan komponen yang pasti ada pada setiap bahasa pemrograman. Variabel umumnya menunjuk pada lokasi memori tertentu di komputer yang digunakan untuk menyimpan data (masukan, hasil pengolahan, keluaran, dll). Tergantung dari bahasa pemrograman yang digunakan, sebuah variabel biasanya diberi identitas melalui nama tertentu, serta mampu menyimpan suatu nilai yang mempunyai tipe data tertentu. Variabel akan valid (bisa digunakan) setelah dideklarasikan terlebih dahulu (pada beberapa bahasa pemrograman, deklarasi dilakukan secara implisit) serta berlaku dalam suatu skope tertentu (maksimum selama program dijalankan). Setelah dideklarasikan, sebuah variabel bisa diberi nilai misalnya "hasil ujian" = "95". Jumlah byte memori yang diperlukan oleh suatu variabel tergantung pada tipe data dari nilai yang disimpan oleh variabel tersebut. Berikut contoh deklarasi serta penggunaan variabel pada bahasa C/C++.

1 int nilaiUjian;
2 char grade;
3 
4 nilaiUjian = 95;
5 if (nilaiUjian >= 80)
6     grade = 'A';

Pada baris ke-1 dan ke-2 dalam contoh diatas, variabel nilaiUjian dan grade dideklarasikan masing-masing dengan tipe data int serta char (lebih detil mengenai tipe data, akan dibahas selanjutnya). Maknanya adalah dalam program yang dibuat, programer mendefinisikan variabel untuk menyimpan data dengan tipe bilangan bulat (tipe data integer) serta huruf (char) untuk menyimpan nilai ujian serta nilai grade (A,B,...,E) yang sepadan dengan nilai ujian tersebut. Terlihat sederhana, tapi variabel selalu ada dalam program, jadi harus diingat dan dipahami dengan benar.

Tipe data

Tipe data merupakan terminologi yang digunakan untuk mendefinisikan jenis variabel beserta jumlah memori yang diperlukan. Pada bahasa pemrograman tertentu (seperti JavaScript), jenis variabel ditentukan secara otomatis berdasarkan data yang diberikan pada variabel tersebut, tapi pada bahasa pemrograman lain yang dikenal dengan istilah strongly typed languages, programer dituntut untuk mendeklarasikan tipe data dari sebuah variabel secara spesifik dan ekplisit. Dalam kedua kasus tersebut, seorang programer harus paham apa yang dimaksud dengan tipe data, untuk menghindari perilaku yang tidak diinginkan dalam program yang dibuat. Secara garis besar, ada tiga macam tipe data yaitu angka (number), huruf (letter) serta boolean (true/false).

Angka (number)

Angka digunakan pada berbagai program untuk mengekpresikan besaran yang digunakan pada program tersebut seperti harga, potongan, nilai ujian, jarak, dan masih banyak lagi. Tipe data angka dibagi lagi berdasarkan jumlah byte memori yang diperlukan serta tipe bilangan (bulat dan desimal). Komputer yang ada saat ini umumnya mempunyai kapasitas memori yang cukup besar sehingga programer hampir tidak perlu memikirkan berapa banyak memori yang diperlukan untuk sebuah variabel, kecuali variabel tersebut menyimpan data dengan kapasitas yang sangat besar seperti pada pemrosesan citra atau video. Berikut beberapa jenis tipe data angka.

int

Tipe data int digunakan untuk mendefiniskan angka dalam bilangan bulat baik "signed" (angka bisa negatif) maupun "unsigned" (angka positif). Berdasarkan kapasitasnya, int dikelompokkan lagi menjadi short (umumnya 16-bit) dan long (umumnya 64-bit).

float

float mengacu pada tipe data angka floating point yaitu tipe angka desimal. Umumnya pada berbagai bahasa pemrograman, pada saat memberikan nilai ke variabel tipe float, programer perlu secara ekplisit menuliskannya dengan huruf 'f' seperti dibawah ini.

1 float pi = 3.14f;
double

double merupakan tipe data untuk double precision floating point, yaitu angka desimal dengan ketelitian dua kali lipat dari float (umumnya float sampai 7 digit dibelakang koma, sedangkan double 14-15 digit dibelakang koma). Jika nilai yang diberikan pada variabel tanpa diakhiri dengan huruf 'f', maka akan dianggap sebagai tipe data double.

Huruf (letter)

Character atau dikenal dengan char merupakan tipe data untuk menyimpan huruf. Variabel tipe char umumnya berukuran 1 atau 2 byte yang digunakan untuk menyimpan data berupa huruf. Pada hakekatnya huruf merupakan angka dengan nilai kode tertentu (ASCII, Unicode, dll) dimana masing-masing huruf diberikan kode standar (contohnya huruf 'a' kodenya 97). Sekumpulan huruf (misalnya sebuah kata) biasanya disebut dengan string. Pada bahasa pemrograman tertentu, umumnya digunakan penanda khusus untuk membedakan angka, huruf maupun string.

1 int x = 9;              //tipe data angka, nilainya 9
2 char c = '9';           //tipe data huruf dengan kode ASCII 57
3 char * kata = "Hai";    //tipe data string berisi 3 huruf

Boolean

Boolean atau bool merupakan tipe data paling primitif yang hanya menyimpan nilai biner 0 (false) atau 1 (true). Nilai biner merupakan nilai dasar yang membangun seluruh komputer yang ada dewasa ini. Bagian komputer berupa processor, memory dan lain sebagainya, pada level terendah merupakan suatu perangkat yang tersusun dari kombinasi transistor (dalam jumlah besar), dimana transistor-transistor tersebut dapat dimatikan (off nilai 0) dan dihidupkan (on nilai 1). Dalam pemrograman dengan level yang lebih tinggi, nilai bool biasanya digunakan sebagai flag untuk menandai suatu kondisi misalnya isPositive, isFinished, dan sejenisnya.


Struktur dasar program

Pada penjelasan diatas, difokuskan pada bagaimana mengekpresikan/menangani data dalam pemrograman. Selanjutnya, pada bagian ini akan dijelaskan mengenai struktur dasar dari program, dimana struktur ini berkaitan dengan proses yang akan dilakukan dalam program tersebut. Program merupakan kumpulan dari perintah-perintah yang harus dijalankan oleh komputer, dimana dalam source code yang disusun oleh programer sebuah perintah disebut dengan pernyataan/statement. Pernyataan dapat dibagi menjadi tiga macam yaitu:

Pernyataan sekuensial (Sequence)

Sequence merupakan sekumpulan pernyataan yang akan dieksekusi satu persatu secara berurutan oleh komputer. Sekumpulan pernyataan dapat ditandai dengan penanda blok (begin/end pada Pascal/VB, {} pada C/C++/C#/Java dll). Berikut adalah contoh pernyataan sekuensial pada C++.

1 int panjang = 10;  //variabel 'panjang' dengan nilai 10
2 int lebar = 5;     //variabel 'lebar' dengan nilai 5
3 int luas;
4 
5 //variabel 'luas' dengan nilai panjang x lebar
6 luas = panjang * lebar;
7 
8 //cetak nilai luas
9 std::cout << "Luas " << luas << std::endl;

Pada contoh diatas, semua pernyataan yang tertulis akan dieksekusi satu persatu, secara berurutan.

Percabangan (Branching)

Percabangan atau branching digunakan untuk mengatur alur eksekusi pernyataan berdasarkan kondisi tertentu. Karena sifat komputer yang menggunakan nilai biner, maka percabangan paling dasar terdiri dari dua cabang, satu untuk kumpulan pernyataan yang akan dieksekusi jika kondisi benar/true, lainnya untuk kondisi jika salah/false. Berikut adalah contoh percabangan sederhana dalam bahasa C.

1 int x = 10;
2 
3 if (x < 0)
4     printf("Nilai x negatif\n");
5 else
6     printf("Nilai x positif\n");

Pada contoh diatas, tidak semua pernyataan akan dieksekusi oleh komputer, dimana pernyataan yang dieksekusi bergantung pada kondisi (nilai variabel x). Jika kondisi yang diuji lebih dari satu, maka digunakan kombinasi dari dua percabangan diatas, misalnya:

 1 double score = 90.0;
 2 
 3 if (score >= 80)
 4     printf("Nilai A\n");
 5 else {
 6     if (score >= 70)
 7         printf("Nilai B\n");
 8     else {
 9         if (score >= 60)
10             printf("Nilai C\n");
11         else {
12             if (score >= 50)
13                 printf("Nilai D\n");
14             else
15                 printf("Nilai E\n");
16         }
17     }
18 }

Pada contoh diatas, jika score < 80, maka pernyataan yang dieksekusi adalah pernyataan antara baris ke-6 s.d. baris ke-18. Oleh karena dalam kumpulan pernyataan ini terdapat percabangan maka dipilih lagi pernyataan mana yang akan dieksekusi berdasarkan kondisinya, misal jika score >= 70 (dan score < 80) maka yang dieksekusi adalah pernyataan pada baris ke-7, sedangkan jika score < 70, maka pernyataan yang dieksekusi adalah pernyataan antara baris ke-9 s.d. baris ke-16, begitu seterusnya. Untuk menuliskan percabangan yang kompleks seperti diatas, tiap bahasa pemrograman umumnya menawarkan cara penulisan yang lebih sederhana seperti dibawah ini (maknanya persis sama):

 1 double score = 90.0;
 2 
 3 if (score >= 80)
 4     printf("Nilai A\n");
 5 else if (score >= 70)
 6     printf("Nilai B\n");
 7 else if (score >= 60)
 8     printf("Nilai C\n");
 9 else if (score >= 50)
10     printf("Nilai D\n");
11 else
12     printf("Nilai E\n");

Pengulangan (loop)

Struktur yang terakhir adalah pengulangan (loop), dimana pada struktur ini, sekumpulan pernyataan akan dieksekusi secara berulang selama suatu kondisi terpenuhi. Biasanya, struktur pengulangan terdiri dari empat bagian yaitu:

  • Inisialisasi kondisi
  • Pengecekan kondisi
  • Pernyataan yang dieksekusi
  • Update kondisi

Dalam berbagai bahasa pemrograman, umumnya ada beberapa cara untuk menuliskan pengulangan, dimana masing-masing memiliki karakteristiknya sendiri-sendiri. Berikut cara penulisan pengulangan pada bahasa C/C++.

 1 //Pengulangan dengan 'while'
 2 int x = 0; //inisialisasi
 3 while (x < 10) {    //pengecekan kondisi
 4     printf("X = %d\n", x);  //pernyataan yang dieksekusi
 5     x++;                    //pernyataan dan update kondisi   
 6 }
 7 
 8 //Pengulangan dengan for
 9 //Inisialisasi, pengecekan dan update kondisi
10 for(int i = 0; i < 10; i++) {
11     printf("i = %d\n", i);  //pernyataan yang dieksekusi
12 }
13 
14 //Pengulangan do-while
15 int y = 0;
16 do {
17     printf("y = %d\n", y);  //pernyataan yang dieksekusi
18     y++;                    //pernyataan dan update kondisi
19 } while (y < 10);           //pengecekan kondisi

Fungsi

Uraian diatas terkait dengan variabel, tipe data dan struktur program. Dengan pengetahuan ini sebenarnya program yang komplek sudah bisa ditulis, karena pada dasarnya sekomplek apapun program, pasti tersusun dari komponen-komponen dasar tersebut. Selanjutnya, pada bagian ini akan dijelaskan satu lagi konsep penting yaitu fungsi.

Dalam proses penyusunan program, sering ditemui sebuah kasus dimana cara penyelesaiannya mirip dan hanya berbeda pada data atau nilai yang digunakan/diperlukan. Sebagai contoh sederhana, pada program untuk menentukan grade nilai ujian mahasiswa berdasarkan nilai ujian, formula yang digunakan sama, hanya berbeda pada nilai ujian yang perlu dikonversikan. Jika ada 40 orang mahasiswa, kemungkinan besar ada 40 nilai ujian yang berbeda dan tentu tidak akan praktis menulis 40 macam program konversi berdasarkan nilai ujian yang diperoleh. Disinilah peran fungsi.

Fungsi adalah sekumpulan pernyataan yang memiliki identitas dan berfungsi untuk melakukan operasi tertentu serta dapat dipanggil seperlunya. Artinya, walaupun pernyataan-pernyataannya ditulis di source code tidak serta merta akan dieksekusi oleh komputer apabila tidak dipanggil. Berikut contoh fungsi dalam bahasa C/C++.

 1 #include <stdio.h>
 2 
 3 char hitungCetakGrade(float nilai)
 4 {
 5     char grade;
 6     if (nilai >= 80)
 7         grade = 'A';
 8     else if (nilai >= 70)
 9         grade = 'B';
10     else if (nilai >= 60)
11         grade = 'C';
12     else if (nilai >= 50)
13         grade = 'D'
14     else
15         grade = 'E';
16     printf("Grade untuk nilai %.1f = %c\n", nilai, grade);
17 
18     return grade;
19 }
20 
21 int main()
22 {
23     printf("----- Konversi nilai -----\n");
24     hitungCetakGrade(90);
25     hitungCetakGrade(80);
26     hitungCetakGrade(55);
27 
28     return 0;
29 }

Pada contoh diatas, terdapat 2 fungsi yaitu hitungCetakGrade (baris ke-3 s.d. 19) dan main (baris ke-21 s.d. 19). Fungsi pertama dipanggil oleh fungsi main dengan parameter yang berbeda-beda sehingga grade yang dicetak akan berubah berdasarkan parameter tersebut. Coba bayangkan apabila seorang programer tidak menggunakan fungsi dan harus menulis pernyataan pada fungsi hitungCetakGrade sebanyak jumlah nilai yang mau dikonversi (pada contoh ini ada 3), tentu source code dari program tersebut akan menjadi besar padahal prosesnya sama. Inilah salah satu kegunaan fungsi yaitu dapat mempersingkat kode program sehingga lebih mudah dipahami.

Sebuah fungsi boleh mempunyai nilai kembalian (return value, pada contoh ini mengembalikan grade hasil konversi dengan tipe char), serta dapat juga mendefinisikan parameter/argument yang diperlukan untuk perhitungan (pada contoh ini nilai). Pada bahasa pemrograman tertentu, fungsi yang tidak mengembalikan nilai disebut prosedur (misalnya pada Pascal atau VB).

Penutup

Pada tulisan ini, disajikan komponen dasar dari pemrograman yang umum terdapat diberbagai bahasa pemrograman. Contoh-contoh yang disajikan disini dalam bahasa C/C++, semata-mata hanya untuk memberikan gambaran konkrit terhadap konsep-konsep yang dijelaskan. Tidak perlu memahamai secara detil mengenai sintak dari contoh-contoh yang disajikan, dan cukup dipahami konsep dasar yang ada pada setiap pembahasan.

Tulisan ini tidak bermaksud membahas keseluruhan aspek dari bahasa pemrograman baik untuk C/C++, maupun bahasa pemrogaman lainnya, hanya menyajikan konsep-konsep paling dasar yang ada didalamnya. Diharapkan dengan membaca tulisan ini, diperoleh gambaran mengenai ide-ide dasar pada bahasa pemrograman, dimana selanjutnya pembaca dituntut untuk menggali lebih detil dan lebih spesifik pada bahasa pemrograman yang ingin digunakan.

Referensi

  1. Teach Yourself Programming in Ten Years
  2. Terjemahan: Belajar Programming Sendiri Dalam Sepuluh Tahun
  3. The Programming Primer

(/ips)

Terminologi dasar pada pemrograman dengan C/C++

Pemahaman yang benar terkait terminologi yang digunakan pada suatu bahasa pemrograman sangat diperlukan untuk mempelajari dan memahami bahasa pemrograman tersebut. Pada tulisan kali ini, akan dipaparkan beberapa istilah dasar yang digunakan pada pemrograman secara umum maupun pada bahasa C/C++. Agar mudah dipahami, disertakan juga contoh-contoh yang tekait.

IDE (Integrated Development Environment)

IDE merupakan perangkat lunak terintegrasi yang digunakan untuk membuat aplikasi. IDE umumnya terdiri dari editor, compiler, linker, debugger beserta program-program tambahan seperti resource compiler, DLL (dynamic link library) import dan lain sebagainya. Berikut beberapa contoh IDE yang mendukung pemrograman dengan C/C++ (Daftar IDE lebih lengkap dapat dilihat disini).

  1. Microsoft Visual Studio. http://www.visualstudio.com/
  2. Code::Blocks. http://www.codeblocks.org/
  3. Dev-C++. http://www.bloodshed.net/devcpp.html
  4. NetBeans. https://netbeans.org/
  5. Eclipse CDT. https://eclipse.org/cdt/
  6. Qt Creator. http://qt-project.org/wiki/Category:Tools::QtCreator
  7. Anjuta Studio. http://anjuta.org/
  8. Code Lite. http://codelite.org/

Penggunaan IDE sangat disarankan karena IDE tersebut akan memudahkan dalam pembuatan, manajemen, perbaikan serta pemahaman alur program yang dibuat melalui proses debugging. Akan tetapi karena kemudahannya serta sifat IDE yang umumnya menyembunyikan tahapan detil untuk mengubah kode sumber (source code) menjadi aplikasi, seorang pemula sering kali tidak bisa membedakan antara kompiler dengan IDE.

Text Editor

Text editor merupakan aplikasi yang digunakan untuk mengolah (membuat, memodifikasi, menyimpan) file dalam bentuk text. Aplikasi ini digunakan untuk menulis source code. Text editor yang bagus dilengkapi dengan penomeran baris serta syntax highlighter untuk memudahkan dalam penulisan source code. Beberapa text editor juga dilengkapi dengan kemampuan untuk memanggil aplikasi lain (seperti compiler), sehingga memudahkan proses pembuatan program. Text editor masih banyak digunakan oleh programmer karena aplikasi ini memerlukan memori yang lebih sedikit dibandingkan IDE sehingga terasa lebih ringan. Selain itu programer memiliki kebebasan dan kontrol penuh untuk mengorganisir bagaimana susunan folder, source code serta bagian-bagian lain dari aplikasi yang dibuat. Berikut beberapa contoh text editor yang dapat digunakan pada pemrograman dengan bahasa C/C++ (Daftar text editor lengkap dapat dilihat disini).

  1. Notepad++. http://notepad-plus-plus.org/
  2. Sublime Text. http://www.sublimetext.com/
  3. Emacs. http://www.gnu.org/software/emacs/
  4. Vim. http://www.vim.org/
  5. Gedit / pluma di MATE. https://wiki.gnome.org/Apps/Gedit
  6. SciTE. http://www.scintilla.org/SciTE.html

Source code (kode sumber)

Source code merupakan perintah-perintah yang ditulis oleh programer untuk dijalankan oleh komputer. Agar bisa dipahami dan dijalankan oleh komputer, source code tersebut perlu diterjemahkan oleh program lain (compiler, assembler, linker, interpreter) menjadi bahasa mesin. Source code disimpan dalam file (source file) dalam format text. Dalam bahasa C/C++, file source code dibagi menjadi bagian implementasi (umumnya mempunyai ekstensi .c .cc .cpp .cxx) dan header file (dengan ekstensi .h .hpp .hxx atau tanpa ekstensi seperti pada iostream dsb). Jika aplikasi yang dibuat sudah kompleks, untuk memudahkan dalam mengorganisir, sebaiknya source code dibagi dalam beberapa file. Berikut contoh source code C++.

 1 #include <iostream>
 2 #include "hello.h"
 3 
 4 void say_hello()
 5 {
 6     std::cout << "Halo dari C/C++." << std::endl;
 7 }
 8 
 9 void say(const char * name)
10 {
11     std::cout << "Halo " << name 
12         << ", semoga harimu menyenangkan." << std::endl;
13 }

Header file

Header file berisi deklarasi yang dapat digunakan pada lebih dari satu kode sumber. Header file umumnya berisi deklarasi fungsi, class, fungsi inline, konstanta, enumerasi maupun template. Oleh karena itu, header file bertindak sebagai penghubung antar beberapa kode sumber. Header file dapat dikelompokkan menjadi tiga macam yaitu:

  1. Header file standar, merupakan header file yang pasti ada pada setiap kompiler C/C++. Contohnya stdio.h, iostream, string, vector dan lain sebagainya.
  2. Header file dari vendor, yaitu header file yang disediakan oleh pihak ketiga bersamaan dengan library untuk memudahkan programer dalam membangun aplikasi. Contohnya windows.h (fungsi-fungsi spesifik pada OS Windows), QtWidgets (salah satu header untuk pemrograman GUI berbasis Qt), mysql.h (akses database MySQL) dan lain sebagainya.
  3. Header file yang dibuat oleh programer. Penamaan header file ini bebas tergantung dari selera programer, tapi disarankan untuk menggunakan nama yang dapat mencerminkan isi dari header file tersebut. Berikut contoh header file yang penulis buat (hello.h).
1 #ifndef __hello_h__
2 #define __hello_h__
3 
4 extern void say_hello();
5 extern void say(const char * name);
6 
7 #endif

Syntax

Syntax merupakan seperangkat aturan yang ditetapkan dalam suatu bahasa pemrograman. Pemahaman syntax mutlak diperlukan agar source code yang ditulis dapat dipahami dan diterjemahkan oleh compiler. Mempelajari bahasa pemrograman mirip dengan mempelajari bahasa komunikasi seperti bahasa Indonesia, bahasa Inggris, dll dimana untuk memahami bahasa tersebut serta dapat berkomunikasi dengan baik, perlu pemahaman terhadap aturan-aturan seperti struktur penulisan kalimat, tanda baca, penulisan paragraf dan sebagainya. Dengan mematuhi syntax yang ditetapkan maka compiler dapat menterjemahkan source code menjadi bahasa mesin.

Compiler (Kompiler)

Compiler adalah program yang digunakan untuk menterjemahkan source code menjadi format lain seperti assembly atau object code. Berikut adalah beberapa compiler yang dapat digunakan pada pemrograman dengan bahasa C/C++ (Daftar lebih lenkap bisa dilihat disini.

  1. GNU Compiler Collection. https://gcc.gnu.org/.
  2. Visual C++ Compiler. http://www.visualstudio.com/
  3. Clang. http://clang.llvm.org/

Assembler

Assembler merupakan program yang berfungsi untuk mengubah source code dalam bahasa assembly menjadi object code. Assembler sangat spesifik pada arsitektur procesor yang didukung, misalnya assembler untuk x86 berbeda dengan assembler untu ARM. Berikut adalah beberapa contoh assembler (Contoh lainnya ada disini.

  1. NASM. http://www.nasm.us/
  2. GNU Assembler. https://www.gnu.org/software/binutils/

Linker

Linker berfungsi untuk menggabungkan beberapa object code hasil dari compiler atau assembler dengan library yang tersedia menjadi satu format lain dalam bentuk bahasa mesin seperti executable/EXE atau pustaka (dynamic linking library/DLL). Berikut adalah contoh-contoh linker.

  1. Microsoft linker. http://msdn.microsoft.com/en-us/library/y0zzbyt4.aspx
  2. GNU Linker. https://www.gnu.org/software/binutils/

Umumnya pada build tools modern seperti GNU C++ compiler, Microsoft Visual C++ Compiler dan lain sebagainya, saat proses kompilasi, jika diperlukan compiler langsung memanggil assembler maupun linker, sehingga hasil akhir dari proses kompilasi adalah program jadi dalam bentuk EXE atau DLL.

Berikut adalah screenshot yang berisi daftar source file (hello.cpp, main.cpp), hasil assembler (hello.s, main.s), object code (hello.o, main.o) dan hasil akhir dalam bentuk executable (hello).

Contoh source file, hasil assembler, object code dan hasil akhir dalam bentuk executable

Error

Istilah error disini mengacu pada kesalahan dalam pemrograman. Tipe error dapat dikelompokkan sebagai berikut.

  • Syntax error. Tipe kesalahan karena syntax tidak dipatuhi oleh programer. Error tipe ini dapat dengan mudah dideteksi oleh compiler.
1 int perkalian(int a, int b)
2 {
3   return a * b    //tidak ada semikolon
4 }
  • Semantic error. Kesalahan yang disebabkan oleh penggunaan pernyataan yang tidak tepat, contohnya:
1 int x;   //Nilai x belum di inisialisasi.
2 std::cout << "Nilai x adalah << x << std::endl;
3 
4 int array[] = {1, 2, 3, 4};
5 std::cout << "Elemen ke-10 adalah " << array[9] << std::endl;
6 //Indeks 9 tidak valid karena hanya ada 4 elemen.
  • Logical error. Kesalahan karena spesifikasi yang ditetapkan tidak dipatuhi, misalnya:
1 //Fungsi untuk menghitung hasil perkalian dua bilangan
2 double perkalian(double a, double b)
3 {
4   return a + b;
5 }

Sedangkan, jika ditinjau berdasarkan pada kapan sebuah error terdeteksi, tipe error ada dua yaitu:

  • Compile time error. Kesalahan jenis ini terdeteksi pada saat proses kompilasi. Syntax error dan sebagian semantic error terdeteksi oleh kompiler pada saat proses kompilasi. Kompiler akan melaporkan pada baris keberapa error tersebut terjadi.

Error biasanya ada pada baris atau sebelum baris yang dilaporkan oleh kompiler. Jika ada lebih dari satu error, telusuri dan perbaikilah mulai dari error yang muncul paling pertama. Bisa saja jumlah kesalahan yang dibuat oleh programer, riilnya lebih sedikit dari yang dilaporkan oleh kompiler. Dengan memperbaiki kesalahan yang terjadi diawal, seringkali jumlah error akan berkurang secara signifikan.

  • Runtime error. Error tipe ini tidak dapat dideteksi oleh kompiler pada saat proses kompilasi, dan baru muncul apabila program dijalankan. Berikut contoh kode program yang dapat menimbulkan runtime error.
 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int array[5];
 7     int indek, nilai;
 8 
 9     cout << "Elemen ke?"; cin >> indek;
10     cout << "Nilainya?";  cin >> nilai;
11 
12     array[indek] = nilai;   
13 
14     return 0;
15 }

Pada potongan kode diatas, jika pada saat program dijalankan user memasukkan nilai indek yang lebih besar dari 4, maka akan terjadi error karena kapasitas variabel array hanya 5.

Debug

Debug berasal dari kata de (menghilangkan) dan bug (serangga). Dalam pemrograman, istilah debug mengacu pada proses menghilangkan kesalahan (runtime error) yang ada dalam program. Untuk melakukan debug diperlukan aplikasi yang disebut debugger. Umumnya kompiler modern seperti GCC, Microsoft Visual C++ Compiler sudah disertai dengan aplikasi debugger. Aplikasi ini akan sangat berguna dan lebih mudah digunakan jika digabungkan dengan IDE. Berikut contoh proses debug dengan menggunakan IDE QtCreator dan GDB.

QtCreator dan GDB

Pada screenshot diatas ditampilkan bagaimana programer dapat menghentikan eksekusi program melalui breakpoint pada baris tertentu (baris ke-12), kemudian programmer juga dapat mengamati nilai dari variabel (x, y dan z) sampai pada baris tersebut. Selain itu, masih banyak lagi yang dapat diamati melalui debugger, misalnya urutan pemanggilan fungsi (call stack), isi memory (memory dump), dll. Disamping itu, sebenarnya melalui debugger programer dapat menelusuri bagaimana program yang ia buat dijalankan step-by-step, dan pemahaman ini sangat membantu untuk meningkatkan kemampuan koding.

Entry point

Entry point adalah posisi kode yang pertama kali dieksekusi oleh Operating System saat program dijalankan. Pada bahasa pemrograman C/C++, program pertama kali dieksekusi mulai dari fungsi main. Berikut adalah beberapa cara mendeklarasikan fungsi main yang benar.

1 int main(void);
2 int main();
3  
4 int main(int argc, char **argv);
5 int main(int argc, char *argv[]);

bit dan byte

bit adalah singkatan dari binary digit (nilainya 0 atau 1 pada sistem bilangan biner). Selanjutnya, byte merupakan istilah untuk besaran 8-bit. Satuan bit ditulis dengan b (misalnya pada satuan kecepatan internet dalam kbps, Mbps, dan lain-lain), sedangkan byte ditulis dengan huruf kapital B (contoh pada kapasitas memori MB, GB). Beberapa besaran terkait

  • 1 kilobyte (KB) sama dengan 210 bytes = 1024 bytes.
  • 1 megabyte (MB) sama dengan 220 bytes = 1024 KB.
  • 1 gigabyte (GB) sama dengan 230 bytes = 1024 MB.
  • 1 terabyte (TB) sama dengan 240 bytes = 1024 GB.
  • 1 petabyte (PB) sama dengan 250 bytes = 1024 TB.
  • 1 exabyte (EB) sama dengan 260 bytes = 1024 PB.

Referensi

  1. C++ Programming Terminology. http://www.flashcardmachine.com/c-programming-terminology.html
  2. Terms used in C++. http://www.sstutor.com/cpp/terms.htm
  3. C++ Glossary. http://www.glenmccl.com/glos.htm
  4. Bjarne Stroustrup's C++ Glossary. http://www.stroustrup.com/glossary.html
  5. Basic Terminology for Programming in C++. http://www.cs.ucla.edu/classes/winter05/cs31/lectures/defs.html
  6. Program errors and exception handling. http://www.inf.unibz.it/~calvanese/teaching/05-06-ip/lecture-notes/uni10/uni10-main.html

(/ips)

Hello world!

First post for testing GitHub page based on Jekyll and Lanyon.

Thanks!