Kamis, 01 Oktober 2009

SejaRah C++

Tahun 1978, Brian W. Kerninghan & Dennis M. Ritchie dari AT & T Laboratories

mengembangkan bahasa B menjadi bahasa C. Bahasa B yang diciptakan oleh Ken Thompson

sebenarnya merupakan pengembangan dari bahasa BCPL ( Basic Combined Programming

Language ) yang diciptakan oleh Martin Richard.

Sejak tahun 1980, bahasa C banyak digunakan pemrogram di Eropa yang sebelumnya

menggunakan bahasa B dan BCPL. Dalam perkembangannya, bahasa C menjadi bahasa paling

populer diantara bahasa lainnya, seperti PASCAL, BASIC, FORTRAN.

Tahun 1989, dunia pemrograman C mengalami peristiwa penting dengan dikeluarkannya

standar bahasa C oleh American National Standards Institute (ANSI). Bahasa C yang

diciptakan Kerninghan & Ritchie kemudian dikenal dengan nama ANSI C.

Mulai awal tahun 1980, Bjarne Stroustrup dari AT & T Bell Laboratories mulai

mengembangkan bahasa C. Pada tahun 1985, lahirlah secara resmi bahasa baru hasil

pengembangan C yang dikenal dengan nama C++. Sebenarnya bahasa C++ mengalami dua tahap

evolusi. C++ yang pertama, dirilis oleh AT&T Laboratories, dinamakan cfront. C++ versi kuno

ini hanya berupa kompiler yang menterjemahkan C++ menjadi bahasa C.

Pada evolusi selanjutnya, Borland International Inc. mengembangkan kompiler C++ menjadi

sebuah kompiler yang mampu mengubah C++ langsung menjadi bahasa mesin (assembly). Sejak

evolusi ini, mulai tahun 1990 C++ menjadi bahasa berorientasi obyek yang digunakan oleh

sebagian besar pemrogram professional.

Struktur Bahasa C++

Contoh 1 : Hasil :

// my first program in C++ Hello World!

#include

int main ()

{

cout << "Hello World!";

return 0;

}

Sisi kiri merupakan source code, yang dapat diberi nama hiworld.cpp dan sisi kanan adalah

hasilnya setelah di-kompile dan di-eksekusi.

SBP/C++/Ayuliana/Feb2004 2

Program diatas merupakan salah satu program paling sederhana dalam C++, tetapi dalam

program tersebut mengandung komponen dasar yang selalu ada pada setiap pemrograman

C++. Jika dilihat satu persatu :

// my first program in C++

Baris ini adalah komentar. semua baris yang diawali dengan dua garis miring (//) akan

dianggap sebagai komentar dan tidak akan berpengaruh terhadap program. Dapat

digunakan oleh programmer untuk menyertakan penjelasan singkat atau observasi

yang terkait dengan program tersebut.

#include

Kalimat yang diawali dengan tanda (#) adalah are preprocessor directive. Bukan

merupakan baris kode yang dieksekusi, tetapi indikasi untuk kompiler. Dalam kasus ini

kalimat #include memberitahukan preprocessor kompiler untuk

menyertakan header file standard iostream. File spesifik ini juga termasuk library

deklarasi standard I/O pada C++ dan file ini disertakan karena fungsi-fungsinya akan

digunakan nanti dalam program.

Prioritas pada operator

Contoh :

a = 5 + 7 % 2

Jawaban dari contoh diatas adalah 6. Dibawah ini adalah prioritas operator dari tinggi ke

rendah :

Priority Operator Description Associativity

1 :: scope Left

2 () [ ] -> .

sizeof Left

++ -- increment/decrement

~ Complement to one (bitwise)

! unary NOT

& * Reference and Dereference

(pointers)

(type) Type casting

3

+ - Unary less sign

Right

4 * / % arithmetical operations Left

5 + - arithmetical operations Left

6 << >> bit shifting (bitwise) Left

7 < <= > >= Relational operators Left

8 == != Relational operators Left

9 & ^ | Bitwise operators Left

10 && || Logic operators Left

11 ?: Conditional Right

12 = += -= *= /= %=

>>= <<= &= ^= |= Assignation Right

13 , Comma, Separat


















Sabtu, 19 September 2009

PREPROCESSOR DIRECTIVES

Preprocessor directives adalah perintah-perintah khusus yang ditujukan ke preprocessor. Semua preprocessor directives dimulai dengan tanda #. Karena preprocessor adalah perintah untuk preprocessornya C++ maka preprocessor directives tidak diakhiri dengan titik koma (;).
Preprocessor directives ini akan mengubah program pada saat dikompile saja, jadi perubahannya hanya bersifat sementara sementara. Setelah selesai maka program akan kembali seperti semula.
Beberapa perintah preprocessor akan dibahas di bagian ini.
4.1 #define directive
Dipakai untuk mendefinisikan suatu identifier dari suatu karakter string yang disubstitusikan ke identifier tersebut (macro substitution) setiap kali dijumpai dalam program.
Format dari #define adalah :#define ARGUMENT1 argumen2
Berikut adalah contoh pemakaian #define, perhatikan bahwa ARGUMEN1 biasa ditulis dengan huruf besar:
#define FALSE 0
#define TRUE !FALSE
#define ERROR 1 “Tidak dapat membuka file”
#define UMUR_S1 22
Perintah-perintah di atas menyuruh kompiler untuk mensubstitusikan 0, !0,“Tidak dapat membuka file” dan 22 setiap menjumpai FALSE, TRUE, ERROR1dan UMUR_S1 dalam program. #define directive ini dapat juga dipakai sebagai suatu makro dengan beberapa argumen, setiap kali nama makro tersebut dijumpai dalam program maka argumen-argumennya diganti oleh argumen-argumen sebenarnya yang ditemukan dalam program, misalnya:
#define MAX(A,B) ((A) > (B) ? (A) : (B))
maksimum = MAX(23,45);
Perhatikan bahwa substitusi yang dilakukan adalah substitusi text sederhana saja,sehingga kalau tidak hati-hati akan timbul efek sampingan yang menyesatkan, misalya:
#define PI 3.1415927
#define L_LING(A) PI*A*A
luas_lingkaran L_LING(2+1);
Yang terjadi setelah substitusi dilakukan adalah:
luas_lingkaran = 3.1415927*2+1*2+1;
sehingga hasilnya tidak seperti yang diharapkan, supaya effek samping seperti di atastidak terjadi maka harus ditambahkan tanda kurung di dalam argumennya sebagai berikut:
#define L_LING(A) PI*(A)*(A)
C++ mempunyai kata kunci inline sebagai function qualifier. Kata kunci ini menyebabkan copy dari fungsi tersebut disubstitusikan setiap fungsi ini dipanggil. Jadijika kita memanggil fungsi inline ini 20 kali dalam program maka kompiler akan menyisipkan 20 copy dari fungsi ini ke EXE file kita. Penyisipan ini menyebabkan program dapat lebih cepat karena tidak diperlukan overhead pada saat pemanggilan fungsi, yaitu parameter-parameternya tidak perlu ditempatkan dalam stack terlebih dulu. Namun penyisipan ini akan menyebabkan ukuran program menjadi besar sehingga kita sebaiknya memakai fungsi inline ini untuk fungsi-fungsi yang kecil atau yang hanya dipanggil di beberapa tempat saja.
Fungsi inline kerjanya mirip dengan makro yang dideklarasi dengan #definedirective, keuntungannya adalah fungsi inline ini dikenali oleh kompiler sehingga kompiler melakukan type checking dan parameter-parameternya. Keuntungan lain adalah fungsi inline ini berkelakuan seperti fungsi biasa tanpa resiko effek samping yang dijumpai substitusi makro. Kata kunci inline ini hanya berupa saran ke kompiler. Fungsi yang lebih besar dari beberapa baris tidak akan dijadikan fungsi inline meskipundeklarasinya memakai kata kunci inline.
Contoh program berikut ini menjelaskan pemakaian fungsi inline.
//include
#define MAX(A,B) ((A) > (B) ? (A): (B))
inline int max(int a, int b)
{
if(a > b)
return a;
return b;
}
main ()
{
int i, x, y;
x = 23; y = 45;
i = MAX(x++, y++); // Effek samping, variabel y dinaikan 2 kali
// Output : x = 24 y = 47
cout << “x = “ << y =" “">
x = 23; y = 45;
i = max(x++, y++);
// Output : x = 24 y = 46
cout << “x =” <<>
return 0;
}
4.2 #include Preprocessor Directive
#include preprocessor directive menyisipkan suatu text file yang ada di disk ke dalam program. Format dari #include preprocessor directive adalah:
#include atau
#include “nama_file”
Text file yang disisipkan dapat apa saja namun umumya yang disisipkan adalah Headerfile. Header file ini akan memberi informasi kepada kompiler C++ bagaimana menginterpretasikan fungsi-fungsi library yang akan dipakai. Misalnya kompiler C++ -memerlukan informasi mengenai fungsi cout, fungsi cin maka perlu disisipkan headerfile iostream.h sebagai berikut:
#include atau
#include “iostream.h”
Tampak bahwa untuk menyisipkan text file ada dua pilihan:
- Nama file diantara tanda kurung <>, pilihan ini memberitahu preprocessor untuk mencari header file di lokasi default yang telah ditetapkan sebelumnya, pilihan ini biasa dipakai untuk menyisipkan standard header yang terletak pada include file direktori yang telah di setuntuk kompiler yang dipakai. Standard header file ini berasal dari kompiler. Programmer pada umumnya tidak melakukan perubahan pada standar header file.
- Nama file diantara sepasang tanda kutip ganda (“ “), pilihan ini memberitahu preprocessor untuk mencari dulu header file di direktori yang saat ini aktif kalau tidak ketemu dilanjutkan pencariannya ke lokasi-lokasi yang telah ditetapkan oleh programmer sebelumnya, pilihan ini biasa dipakai untuk menyisipkan non-standard header file, Non-standard header file sering mengalami modifikasi oleh programmer yang membuatnya dan preprocessor selalu menyisipkan yang terbaru.
4.3 #if, #else dan #endif Preprocessor Directive
Antara kompiler yang satu dengan kompiler yang lainnya dapat menggunakan nama yang berbeda untuk suatu header file yang definisinya hampir sama. Misal headerfile alloc.h pada Borland C++ adalah hampir ekivalen dengan header file malloc.h pada Microsoft C++. Jadi kita perlu sarana untuk menentukan header file yang mana yang harus disisipkan pada saat program dikompile, misalnya program yang dibuat harusmendukung Borland C++ dan Microsoft C++ maka pemakaian preprocessor directivenya adalah sebagai berikut:
#ifdef __BORLAND__
#include
#else
#include
#endif
Kalau header file ini dikompile dengan Borland C++ maka nama simbolik__BORLAND__ otomatis didefinisikan oleh kompiler sehingga standard header filealloc.h yang disisipkan.
Dalam C++ programmer umumnya membatasi apa saja yang dapat masuk kedalam header file yang dibuat. Header file umumnya hanya memuat definisi-definisi misalnya tipe, nama variabel ekternal, definisi struktur, konstanta, makro dan prototipefungsi. Programmer biasanya menghindari satu header file raksasa yang memuat semua definisi karena memperlambat proses kompilasi. Umumnya programmer lebih menyukai beberapa header file yang lebih kecil, jadi ada beberapa header file. Kalau satu header file disisipkan lebih dari satu kali secara tidak sengaja (header file dapat bersusun, artinya dalam suatu header file ada header file yang lain) maka akan ada definisi ulang yang akan menimbulkan kesalahan pada saat program di kompile. Untuk menghindari keadaan ini dapat dipakai preprocessor directive #ifndef, #define dan #endif untuk membuat headerfile sebagai berikut:
#ifndef _NAMAFILE_H
#define _NAMAFILE_H
#define VER_NUM “1.00”
#define REL_DATE “27/09/95”
#if __WINDOWS__
#define OS_VER “WINDOWS”
#else
#define OS_VER “DOS
#endif
#endif
Pada saat header file ini dikompile, kompiler pertama-tama melakukan check apakah _NAMAFILE_H telah didefinisikan. Bila belum didefinisikan maka headerfile ini belum pernah disisipkan sehingga _NAMAFILE_H didefinisikan dulu lalu header file ini disisipkan. Bila NAMAFILE_H sudah didefinisikan maka isi dari header file ini tidak disisipkan.

Senin, 14 September 2009

My Biodata

Nama : Fanny Fransisca
TTL : Jakarta, 3 juni 1991
Alamat : jl prancis duta Bandara Permai Fs1 no 19
Agama : buddha
Wn : Indonesia
NIM : 0101090081