Tutorial Pemrograman Bahasa C dan
Tutorial Pemrograman Bahasa C dan
Assembly
Assembly
oleh Darmawan MS a.k.a Pinczakko oleh Darmawan MS a.k.a Pinczakko Daftar Isi
Daftar Isi
•
• Pengetahuan Dasar Pemrograman Assembly dan CPengetahuan Dasar Pemrograman Assembly dan C •
• Pemrograman Bahasa CPemrograman Bahasa C
o
o
Alasan Penggunaan Bahasa CAlasan Penggunaan Bahasa Co
o
Pengenalan Sintaks Bahasa CPengenalan Sintaks Bahasa C
Preprocessor dan MacroPreprocessor dan Macro CompilerCompiler LinkerLinker PernyataanPernyataan VariabelVariabel OperatorOperator PercabanganPercabangan PerulanganPerulangan
Fungsi dan Struktur Program CFungsi dan Struktur Program C
Fungsi untuk Input dan OutputFungsi untuk Input dan Output
Pointer dan ArrayPointer dan Array
Struct dan UnionStruct dan Union
Lebih Lanjut Tentang FungsiLebih Lanjut Tentang Fungsi
o
o
Arsitektur Driver Windows 2000/XPArsitektur Driver Windows 2000/XP •• Pemrograman Bahasa AssemblyPemrograman Bahasa Assembly
o
o
Arsitektur Microprocessor x86Arsitektur Microprocessor x86
Arsitektur DasarArsitektur Dasar
Mode Kerja Microprocessor x86Mode Kerja Microprocessor x86
Arsitektur x86 ModernArsitektur x86 Modern
o
o
Sintaks Bahasa Assembly x86Sintaks Bahasa Assembly x86o
o
Program Assembly SederhanaProgram Assembly Sederhana •• Penggunaan Assembly dan C dalam satu ProgramPenggunaan Assembly dan C dalam satu Program •
• Beberapa Sumber InformasiBeberapa Sumber Informasi •
• CreditsCredits
Artikel ini pada dasarnya adalah follow up dari arti
Artikel ini pada dasarnya adalah follow up dari arti kel Tutorial Membuat Patch dalam Bentuk Driver padakel Tutorial Membuat Patch dalam Bentuk Driver pada Windows 2000/XP. Sebagian source code yang akan dipelajari pada tulisan ini adalah source code dari Windows 2000/XP. Sebagian source code yang akan dipelajari pada tulisan ini adalah source code dari artikel tersebut. Tujuan pembuatan tutorial ini adalah 'Bringing System Level Programming to
artikel tersebut. Tujuan pembuatan tutorial ini adalah 'Bringing System Level Programming to the Mass'.the Mass'. Tutorial ini sendiri akan terbagi menjadi dua bagian besar, yaitu
Tutorial ini sendiri akan terbagi menjadi dua bagian besar, yaitu pemrogaman bahasa C danpemrogaman bahasa C dan pemrograman bahasa assembly, namun pada bagian akhir akan kita
pemrograman bahasa assembly, namun pada bagian akhir akan kita bahas penggunaan bahasa assemblybahas penggunaan bahasa assembly yang terintegrasi dalam sebuah source code bahasa C, yang lazim disebut i
yang terintegrasi dalam sebuah source code bahasa C, yang lazim disebut i nline assembly. Penulisnline assembly. Penulis mengikutsertakan bagian yang agak "advanced" ini karena pada source code Tutorial Membuat Patch mengikutsertakan bagian yang agak "advanced" ini karena pada source code Tutorial Membuat Patch dalam bentuk Driver
dalam bentuk Driver pada Windows 2000/XP teknik ini pada Windows 2000/XP teknik ini dimanfaatkan. Perlu anda ketahui bahwa bahasadimanfaatkan. Perlu anda ketahui bahwa bahasa assembly yang akan dibahas pada t
assembly yang akan dibahas pada t ulisan ini adalah bahasa assembly untuk arsitektur ulisan ini adalah bahasa assembly untuk arsitektur hardware x86(PC)hardware x86(PC) dan tidak dapat diaplikasikan pada arsitektur hardware lainnya.
dan tidak dapat diaplikasikan pada arsitektur hardware lainnya. Petunjuk:
Petunjuk:
Bagi yang sudah pernah menggunakan bahasa C
Bagi yang sudah pernah menggunakan bahasa C sebelumnya, penulis menyarankan untuk langsungsebelumnya, penulis menyarankan untuk langsung membaca bagian
membaca bagian Pointer dan ArrayPointer dan Array , kemudian bagian, kemudian bagian Struct dan UnionStruct dan Union dan dilanjutkan sampai bagiandan dilanjutkan sampai bagian akhir Pemrograman C.
Pengetahuan Dasar Pemrograman C dan Assembly
Pengetahuan Dasar Pemrograman C dan Assembly
Bagian ini diperuntukkan bagi pembaca yangBagian ini diperuntukkan bagi pembaca yang masih belum mengetahui pemrograman sama sekali ataumasih belum mengetahui pemrograman sama sekali atau yang sudah tahu tetapi ingin menyegarkan kembali ingatannya. Kita akan memulai dengan sistem yang sudah tahu tetapi ingin menyegarkan kembali ingatannya. Kita akan memulai dengan sistem bilangan yang digunakan pada komputer. Komputer hanya mengenal nilai 0 dan 1, oleh karena itu bilangan yang digunakan pada komputer. Komputer hanya mengenal nilai 0 dan 1, oleh karena itu digunakanlah beberapa sistem bilangan untuk mempermudah. Sistem bilangan tersebut
digunakanlah beberapa sistem bilangan untuk mempermudah. Sistem bilangan tersebut antara lain:antara lain:
1.
1. Bilangan Biner (binary), yaitu bilangan basis 2, sehingga nilai yang dikenal hanya 0 dan 1.Bilangan Biner (binary), yaitu bilangan basis 2, sehingga nilai yang dikenal hanya 0 dan 1.
Contoh : 101
Contoh : 101binerbinerbernilai sama dengan 5bernilai sama dengan 5desimaldesimal, sebab 101, sebab 101binerbiner= 1 x 2= 1 x 200+ 0 x 2+ 0 x 211+ 1 x 2+ 1 x 222atau 5atau 5desimaldesimal..
Operasi matematis lainnya sama dengan bilangan desimal, hanya
Operasi matematis lainnya sama dengan bilangan desimal, hanya di sini bilangan yang digunakandi sini bilangan yang digunakan adalah basis 2.
adalah basis 2.
2.
2. Bilangan Oktal (octal), yaitu bilangan basis 8, sehingga nilai yang dikenal hanya 0 s/d 7. Contoh :Bilangan Oktal (octal), yaitu bilangan basis 8, sehingga nilai yang dikenal hanya 0 s/d 7. Contoh :
072
072octaloctal(prefix 0 digunakan pada bahasa pemrograman C) (prefix 0 digunakan pada bahasa pemrograman C) bernilai sama dengan 58desimal,bernilai sama dengan 58desimal,
sebab 072
sebab 072octaloctal= 2 x 8= 2 x 800+ 7 x 8+ 7 x 811atau 58atau 58desimaldesimal. Operasi matematis lainnya sama de. Operasi matematis lainnya sama de ngan bilanganngan bilangan
desimal, hanya di sini
desimal, hanya di sini bilangan yang digunakan adalah basis 8.bilangan yang digunakan adalah basis 8.
3.
3. Bilangan Heksadesimal (Hexadecimal), yaitu bilangan basis 16, sehingga nilai Bilangan Heksadesimal (Hexadecimal), yaitu bilangan basis 16, sehingga nilai yang dikenal hanyayang dikenal hanya 0 s/d 9 dan huruf A s/d F
0 s/d 9 dan huruf A s/d F melambangkan 10melambangkan 10desimaldesimals/d 15s/d 15 desimaldesimal. Contoh : 0x72. Contoh : 0x72hexadecimalhexadecimal (prefix 0x(prefix 0x
digunakan pada bahasa pemrograman C) bernilai sama
digunakan pada bahasa pemrograman C) bernilai sama dengan 114dengan 114desimaldesimal, sebab 0x72, sebab 0x72hexadecimalhexadecimal = 2= 2
x 16
x 1600+ 7 x 16+ 7 x 1611atau 114atau 114 desimal
desimal. Operasi matematis lainnya sama dengan . Operasi matematis lainnya sama dengan bilangan desimal, hanyabilangan desimal, hanya
di sini bilangan yang digunakan adalah basis 16. Ada satu hal yang perlu anda perhatikan, yaitu di sini bilangan yang digunakan adalah basis 16. Ada satu hal yang perlu anda perhatikan, yaitu konversi dari bilangan biner ke hexadecimal adalah suatu operasi yang "agak natural", sebab konversi dari bilangan biner ke hexadecimal adalah suatu operasi yang "agak natural", sebab anda tinggal memecah bilangan hexadecimal tersebut menjadi
anda tinggal memecah bilangan hexadecimal tersebut menjadi elemen-elemennya kemudianelemen-elemennya kemudian setiap elemen direpresentasikan dengan 4 bilangan biner, maka anda telah memperoleh bilangan setiap elemen direpresentasikan dengan 4 bilangan biner, maka anda telah memperoleh bilangan biner yang bernilai sama dengan bilangan hexadecimal tersebut. Contoh: 0xA2 = ...
biner yang bernilai sama dengan bilangan hexadecimal tersebut. Contoh: 0xA2 = ... binerbiner, solusi:, solusi:
pertama pecah menjadi elemennya , kita peroleh A dan
pertama pecah menjadi elemennya , kita peroleh A dan 2. A jika direpresentasikan dalam 42. A jika direpresentasikan dalam 4 angka biner adalah 1010 (10
angka biner adalah 1010 (10desimaldesimal) dan 2 jika direpresentasikan dalam 4 ) dan 2 jika direpresentasikan dalam 4 angka biner adalah 0010angka biner adalah 0010
sehingga kita peroleh 0xA2 = 1010 0010
sehingga kita peroleh 0xA2 = 1010 0010 binerbiner. Kemudahan operasi ini . Kemudahan operasi ini akan membantu anda saatakan membantu anda saat
berurusan dengan pemrograman yang mengolah informasi bilangan biner, jadi
berurusan dengan pemrograman yang mengolah informasi bilangan biner, jadi sangat perlusangat perlu untuk dipahami.
untuk dipahami.
Pemrograman atau programming secara umum dilakukan untuk membuat sekumpulan instruksi yang Pemrograman atau programming secara umum dilakukan untuk membuat sekumpulan instruksi yang dapat dieksekusi (dijalankan) pada komputer. Jadi,
dapat dieksekusi (dijalankan) pada komputer. Jadi, instruksi-instruksi yang dapat dijalankan (executable)instruksi-instruksi yang dapat dijalankan (executable) tersebut merupakan hasil akhir yang kita inginkan. Kumpulan instruksi-instruksi itulah yang disebut tersebut merupakan hasil akhir yang kita inginkan. Kumpulan instruksi-instruksi itulah yang disebut software. Instruksi yang dihasilkan biasanya hanya dapat dieksekusi pada satu arsitektur komputer. software. Instruksi yang dihasilkan biasanya hanya dapat dieksekusi pada satu arsitektur komputer. Instruksi yang dimaksud adalah "machine code" atau "bahasa mesin", bahasa mesin ini tidak lebih dari Instruksi yang dimaksud adalah "machine code" atau "bahasa mesin", bahasa mesin ini tidak lebih dari kumpulan bit-bit 0 dan 1 yang dapat dipahami oleh sebuah komputer. Perbedaan satu arsitektur kumpulan bit-bit 0 dan 1 yang dapat dipahami oleh sebuah komputer. Perbedaan satu arsitektur komputer (misalnya x86
komputer (misalnya x8611) dengan arsitektur lain (misalnya Sparc) dengan arsitektur lain (misalnya Sparc22) adalah bagaimana bit-bit tersebut) adalah bagaimana bit-bit tersebut
diorganisasikan, hal inilah yang menyebabkan machine code untuk
diorganisasikan, hal inilah yang menyebabkan machine code untuk satu macam arsitektur tidak satu macam arsitektur tidak dapatdapat dieksekusi pada arsitektur yang lain. Prosesnya kira-kira seperti
dieksekusi pada arsitektur yang lain. Prosesnya kira-kira seperti ini:ini:
Pembuatan Machine Code --> Machine Code --> Eksekusi pada Komputer
Pembuatan Machine Code --> Machine Code --> Eksekusi pada Komputer
Catatan: Catatan:
1
1x86 adalah keluarga microprocessor yang digunakan oleh para pemakai PC, yang termasuk ke dalamx86 adalah keluarga microprocessor yang digunakan oleh para pemakai PC, yang termasuk ke dalam
keluarga ini antara l
keluarga ini antara l ain: Intel 80286, 80386, 80486, Pentium (i586), PentiumPro (i686),Pentium 4 (i786);ain: Intel 80286, 80386, 80486, Pentium (i586), PentiumPro (i686),Pentium 4 (i786); AMD K6, K6-2, K6-3, Athlon (K7), Duron; Via Cyrix III; Transmeta Crusoe, dan lain-lain.
AMD K6, K6-2, K6-3, Athlon (K7), Duron; Via Cyrix III; Transmeta Crusoe, dan lain-lain.
2
2Sparc adalah keluarga microprocessor yang digunakan pada Server-server Sparc adalah keluarga microprocessor yang digunakan pada Server-server Sun Microsystem, yangSun Microsystem, yang
termasuk ke dalamnya antara lain: UltraSparc II, IIIi, III. termasuk ke dalamnya antara lain: UltraSparc II, IIIi, III.
Teknik pemrograman merupakan teknik yang digunakan untuk menghasilkan kumpulan machine code Teknik pemrograman merupakan teknik yang digunakan untuk menghasilkan kumpulan machine code tadi. Ketika komputer digital pertama kali
tadi. Ketika komputer digital pertama kali muncul (komputer ENIAC), untuk membuat program, orangmuncul (komputer ENIAC), untuk membuat program, orang harus langsung memasukkan bit-bit machine code tadi ke dalam komputer melalui pengaturan harus langsung memasukkan bit-bit machine code tadi ke dalam komputer melalui pengaturan saklar-saklar dan punch cards (kartu yang dilubangi). Perkembangan selanjutnya adalah orang tidak perlu lagi saklar dan punch cards (kartu yang dilubangi). Perkembangan selanjutnya adalah orang tidak perlu lagi pusing dengan bit-bit program yang sangat mudah salah (sebab anda langsung bekerja dengan angka 0 pusing dengan bit-bit program yang sangat mudah salah (sebab anda langsung bekerja dengan angka 0 dan 1 dalam jumlah yang sangat besar), muncul lah apa yang disebut assembler, yaitu program yang dan 1 dalam jumlah yang sangat besar), muncul lah apa yang disebut assembler, yaitu program yang dapat mengubah token-token (potongan kata-kata tertentu
dapat mengubah token-token (potongan kata-kata tertentu yang dapat dipahami oleh assembler)yang dapat dipahami oleh assembler) sederhana menjadi machine code. Karena
sederhana menjadi machine code. Karena adanya assembler, orang mulai mengenal apa yang diadanya assembler, orang mulai mengenal apa yang di namakannamakan bahasa assembly, yaitu bahasa yang menggunakan token-token yang dapat
bahasa assembly, yaitu bahasa yang menggunakan token-token yang dapat dikenali oleh assembler, jadidikenali oleh assembler, jadi bahasa assembly satu level lebih maju dibanding bahasa mesin atau machine code. Sejak saat inilah bahasa assembly satu level lebih maju dibanding bahasa mesin atau machine code. Sejak saat inilah orang mulai mengenal apa yang dikatakan source code , yaitu bentuk program yang belum
sebuah bahasa pemrograman menjadi bentuk yang dapat
sebuah bahasa pemrograman menjadi bentuk yang dapat dieksekusi pada komputer. Source codedieksekusi pada komputer. Source code biasanya berbentuk file yang dapat di edit.
biasanya berbentuk file yang dapat di edit.
Perlu anda ketahui, bahwa saat ini pun anda dapat memprogram dalam machine code jika anda memang Perlu anda ketahui, bahwa saat ini pun anda dapat memprogram dalam machine code jika anda memang benar-benar menginginkannya. Caranya mudah, anda tinggal mencari program hexeditor, misalnya benar-benar menginginkannya. Caranya mudah, anda tinggal mencari program hexeditor, misalnya Hexworkshop kemudian membuat file yang berisi machine code dalam hexadesimal (bilangan basis 16). Hexworkshop kemudian membuat file yang berisi machine code dalam hexadesimal (bilangan basis 16). Penulis beberapa kali melakukan hal ini karena belum mampu menggunakan assembler dengan baik Penulis beberapa kali melakukan hal ini karena belum mampu menggunakan assembler dengan baik (output file biner yang dihasilkan oleh assembler tidak
(output file biner yang dihasilkan oleh assembler tidak sesuai dengan yang diharapkan). Sebenarnysesuai dengan yang diharapkan). Sebenarnya jikaa jika anda membaca dan mencoba trik ke-3 pada artikel Trik
anda membaca dan mencoba trik ke-3 pada artikel Trik Modifikasi Bios, anda telah memprogram denganModifikasi Bios, anda telah memprogram dengan menggunakan machine code untuk microprocessor keluarga x86. Jadi,
menggunakan machine code untuk microprocessor keluarga x86. Jadi, cukup mudah bukan :).cukup mudah bukan :). Dalam tutorial ini kita akan belajar
Dalam tutorial ini kita akan belajar tentang assembler. Assembler pada dasarnya bekerja dengan caratentang assembler. Assembler pada dasarnya bekerja dengan cara "mencocokkan (matching)". Setiap baris perintah yang
"mencocokkan (matching)". Setiap baris perintah yang anda tulis dalam bahasa assembly akan dianda tulis dalam bahasa assembly akan di
asosiasikan dengan satu machine code tertentu, sehingga pada assembler setiap baris perintah yang anda asosiasikan dengan satu machine code tertentu, sehingga pada assembler setiap baris perintah yang anda ketikkan akan menghasilkan satu machine code.
ketikkan akan menghasilkan satu machine code. Jadi jika anda menggunakan assembler, prosesnya akanJadi jika anda menggunakan assembler, prosesnya akan kurang lebih seperti ini (tentang li
kurang lebih seperti ini (tentang li nker akan dijelaskan lebih lanjut):nker akan dijelaskan lebih lanjut):
Pembuatan Source Code Assembly
Pembuatan Source Code Assembly
|
|
V
V
Source Code Assembly
Source Code Assembly
|
|
V
V
Assembler
Assembler
|
|
V
V
library,object
library,object
file-->
file-->
Linker
Linker
|
|
V
V
Machine Code
Machine Code
|
|
V
V
Eksekusi pada komputer
Eksekusi pada komputer
Perkembangan selanjutnya adalah bahasa tingkat menengah, yaitu bahasa pemrograman C. Pada
Perkembangan selanjutnya adalah bahasa tingkat menengah, yaitu bahasa pemrograman C. Pada bahasabahasa pemrograman ini, machine code dihasilkan melalui
pemrograman ini, machine code dihasilkan melalui tahap yang lebih panjang. Mungkin anda berttahap yang lebih panjang. Mungkin anda bert anya,anya, kalau orang sudah bisa membuat program dengan assembler, mengapa harus ada bahasa C ? ,
kalau orang sudah bisa membuat program dengan assembler, mengapa harus ada bahasa C ? , jawabannya adalah bahasa assembly masih terlalu "machine oriented",
jawabannya adalah bahasa assembly masih terlalu "machine oriented", sukar dipahami dan bahasanyasukar dipahami dan bahasanya lebih dekat kepada machine code daripada ke bahasa manusia, alasan lain adalah karena dengan lebih dekat kepada machine code daripada ke bahasa manusia, alasan lain adalah karena dengan membuat bahasa yang levelnya lebih tinggi (lebih dekat ke
membuat bahasa yang levelnya lebih tinggi (lebih dekat ke bahasa manusia) maka pengembabahasa manusia) maka pengembanganngan perangkat lunak (software) akan lebih cepat, masih ada satu alasan lagi dan mungkin yang terpenting perangkat lunak (software) akan lebih cepat, masih ada satu alasan lagi dan mungkin yang terpenting yaitu bahasa assembly hanya dapat dieksekusi oleh satu macam arsitektur komputer saja seperti yang yaitu bahasa assembly hanya dapat dieksekusi oleh satu macam arsitektur komputer saja seperti yang disebutkan sebelumnya. Jika kita dapat membuat program yang dapat berjalan di berbagai macam disebutkan sebelumnya. Jika kita dapat membuat program yang dapat berjalan di berbagai macam arsitektur komputer maka itu akan mempercepat pengembangan software. Namun demikian, itu tidak arsitektur komputer maka itu akan mempercepat pengembangan software. Namun demikian, itu tidak berarti bahwa setiap program yang ditulis dengan bahasa C akan dapat berjalan
berarti bahwa setiap program yang ditulis dengan bahasa C akan dapat berjalan pada semua mesin.pada semua mesin. Misalnya, program driver yang di buat pada Tutorial Membuat Patch ... yang akan kita
Misalnya, program driver yang di buat pada Tutorial Membuat Patch ... yang akan kita bahas adalahbahas adalah program C yang tidak portable
program C yang tidak portable (dapat digunakan pada komputer dengan arsitektur yang berbeda), karena(dapat digunakan pada komputer dengan arsitektur yang berbeda), karena tidak dapat dieksekusi di luar arsitektur
tidak dapat dieksekusi di luar arsitektur komputer x86 yang menggunakan system bus PCI compliant.komputer x86 yang menggunakan system bus PCI compliant. Software yang dijamin portable biasanya adalah software yang tidak mengutak-atik sistem, atau yang Software yang dijamin portable biasanya adalah software yang tidak mengutak-atik sistem, atau yang menggunakan API(Application Programming Interface) standar dan tersedia di
menggunakan API(Application Programming Interface) standar dan tersedia di berbagai arsitekturberbagai arsitektur komputer misalnya software yang menggunakan OpenGL atau yang dibuat dengan kriteria ANSI C. komputer misalnya software yang menggunakan OpenGL atau yang dibuat dengan kriteria ANSI C. Berikut ini adalah
Berikut ini adalah langkah-langkalangkah-langkah pembuatan program dengan bahasa C h pembuatan program dengan bahasa C (tentang preprocessor, compiler(tentang preprocessor, compiler & linker akan dijelaskan lebih l
Pembuatan Source Code C
Pembuatan Source Code C
|
|
V
V
Source Code C
Source Code C
|
|
V
V
Preprocessor
Preprocessor
|
|
V
V
Compiler
Compiler
|
|
V
V
Assembler
Assembler
|
|
V
V
library,object
library,object
file-->
file-->
Linker
Linker
|
|
V
V
Machine Code
Machine Code
|
|
V
V
Eksekusi pada komputer
Eksekusi pada komputer
Inilah garis besar dari apa yang harus kita
Inilah garis besar dari apa yang harus kita lakukan untuk menghasilkan sebuah program dalam bahalakukan untuk menghasilkan sebuah program dalam bahasa C.sa C. Anda tidak perlu
Anda tidak perlu khawatir dengan langkah-langkah yang begitu banyak, sebab dalam sebagian besarkhawatir dengan langkah-langkah yang begitu banyak, sebab dalam sebagian besar kasus, kita hanya perlu membuat source code kemudian tools programming yang kita gunakan akan kasus, kita hanya perlu membuat source code kemudian tools programming yang kita gunakan akan mengerjakan langkah -langkah selanjutnya sampai sebuah file executable
mengerjakan langkah -langkah selanjutnya sampai sebuah file executable dihasilkan. Bahasadihasilkan. Bahasa pemrograman yang lain sebagian besar
pemrograman yang lain sebagian besar melakukan pembuatan program seperti C melakukan pembuatan program seperti C namun dengannamun dengan beberapa langkah tambahan, tetapi ada juga
beberapa langkah tambahan, tetapi ada juga bahasa pemrograman yang menggunakan cara yang agakbahasa pemrograman yang menggunakan cara yang agak berbeda, misalnya Java. Untuk mengetahui bagaimana cara kerja
berbeda, misalnya Java. Untuk mengetahui bagaimana cara kerja bahasa tingkat tinggi lainnya anda perlubahasa tingkat tinggi lainnya anda perlu membaca buku atau tutorial dalam
membaca buku atau tutorial dalam bahasa yang bersangkutan.bahasa yang bersangkutan.
Pemrograman Bahasa C
Pemrograman Bahasa C
Setelah membaca ulasan di atas,Setelah membaca ulasan di atas, selnjutnya kita akan membahas tentang bahasa C. selnjutnya kita akan membahas tentang bahasa C. Bahasa ini adalahBahasa ini adalah salah satu bahasa pemrograman yang andal dan
salah satu bahasa pemrograman yang andal dan banyak digunakan. Seperti yang telah disebutkanbanyak digunakan. Seperti yang telah disebutkan sebelumnya, bahasa C dapat berjalan pada berbagai platform, jadi dengan mempelajari bahasa ini, sebelumnya, bahasa C dapat berjalan pada berbagai platform, jadi dengan mempelajari bahasa ini,
pengetahuan yang anda proleh dapat digunakan untuk mmeprogram di komputer dengan arsitektur selain pengetahuan yang anda proleh dapat digunakan untuk mmeprogram di komputer dengan arsitektur selain x86.
x86.
Alasan Penggunaan Bahasa C
Alasan Penggunaan Bahasa C
Bahasa C saat iniBahasa C saat ini masih merupakan bahasa pemrograman yang banyak digunakan dan powerful. Sebelummasih merupakan bahasa pemrograman yang banyak digunakan dan powerful. Sebelum melangkah lebih jauh, penulis akan
melangkah lebih jauh, penulis akan menjelaskan beberapa alasan penggunaan bahasa C.menjelaskan beberapa alasan penggunaan bahasa C. 1.
1. DalaDalam beberapm beberapa aplikaa aplikasi pemrogsi pemrogramaraman pada sisten pada sistem operasi wim operasi windowndows, kita tidak das, kita tidak dapat ataupat atau sangat sulit menggunakan bahasa pemrograman selain C, misalnya untuk
sangat sulit menggunakan bahasa pemrograman selain C, misalnya untuk mengaplikasikanmengaplikasikan sebuah User Interface yang belum memiliki dukungan library untuk C++ pada visual C++ atau sebuah User Interface yang belum memiliki dukungan library untuk C++ pada visual C++ atau
dalam pembuatan driver. Penulis menyebutkan sangat sulit
dalam pembuatan driver. Penulis menyebutkan sangat sulit berarti tidak menutup kemungkinanberarti tidak menutup kemungkinan menggunakan bahasa lain, bahasa lain tersebut adalah C++, namun dukungan ofisial dari menggunakan bahasa lain, bahasa lain tersebut adalah C++, namun dukungan ofisial dari microsoft untuk penggunaan C++ pada kasus yang di
microsoft untuk penggunaan C++ pada kasus yang di sebutkan sebelumnya belum ada sehinggasebutkan sebelumnya belum ada sehingga anda harus membuat semacam "wrapper" sendiri jika ingin menggunakan C++ dan hal ini sulit anda harus membuat semacam "wrapper" sendiri jika ingin menggunakan C++ dan hal ini sulit dilakukan bagi pemrogram pemula. Perlu diket
dilakukan bagi pemrogram pemula. Perlu diket ahui bahwa Windows saat ini belum ahui bahwa Windows saat ini belum merupakanmerupakan sistem operasi yang benar-benar object oriented (C++ adalah bahasa pemrograman yang object sistem operasi yang benar-benar object oriented (C++ adalah bahasa pemrograman yang object oriented) dan "core" dari sistem
oriented) dan "core" dari sistem operasinya sendiri masih diimplementasikan dalam bahasa C,operasinya sendiri masih diimplementasikan dalam bahasa C, sehingga fleksibilitas terbesar dalam membuat software untuk windows akan kita peroleh jika sehingga fleksibilitas terbesar dalam membuat software untuk windows akan kita peroleh jika kita menggunakan bahasa C. Namun demikian, cara ini
kita menggunakan bahasa C. Namun demikian, cara ini juga merupakan salah satu cara juga merupakan salah satu cara yangyang cukup sulit bagi para pemrogram pemula, namun anda tidak perlu khawatir, sebab dalam tutorial cukup sulit bagi para pemrogram pemula, namun anda tidak perlu khawatir, sebab dalam tutorial ini akan dijelaskan prinsip
ini akan dijelaskan prinsip dasarnya.dasarnya. 2.
2. BeberBeberapa softwapa software membare membutuhutuhkan kinekan kinerja yang tinrja yang tinggi dari segggi dari segi kecepatai kecepatan, hal ini bisa din, hal ini bisa dicapacapaii dengan mudah jika kita menggunakan bahasa pemrograman yang "sederhana" seperti
dengan mudah jika kita menggunakan bahasa pemrograman yang "sederhana" seperti C. PenulisC. Penulis sendiri telah membuat beberapa software dalam dua versi, yaitu C
sendiri telah membuat beberapa software dalam dua versi, yaitu C "murni" dan C++ , kemudian"murni" dan C++ , kemudian membandingkan kinerjanya, ternyata software yang diimplementasikan dengan C
membandingkan kinerjanya, ternyata software yang diimplementasikan dengan C memilikimemiliki kinerja yang lebih tinggi.
kinerja yang lebih tinggi. 3.
3. KelemaKelemahan darhan dari bahasa C yani bahasa C yang penulig penulis ketahus ketahui sampai sampai saat ini adali saat ini adalah dari segi komah dari segi kompleksipleksitastas pemeliharaan dan pengembangan software yang kita buat,
pemeliharaan dan pengembangan software yang kita buat, jika software tersebut jika software tersebut sudah cukupsudah cukup kompleks. Sebagai contoh, software ExploChip pada art
kompleks. Sebagai contoh, software ExploChip pada art ikel Tutorial Membuat Patch... dibuatikel Tutorial Membuat Patch... dibuat dengan C++, C dan
dengan C++, C dan Assembly, namun C++ merupakan bahasa yang terbanyak digunakan untukAssembly, namun C++ merupakan bahasa yang terbanyak digunakan untuk memudahkan pemeliharaan dan pengembangan.
memudahkan pemeliharaan dan pengembangan.
Pengenalan Sintaks Bahasa C
Pengenalan Sintaks Bahasa C
Sintaks adalah suatu bentuk dasar (biasanya kata) yang dapat dipahami dan diolah oleh compiler. Pada Sintaks adalah suatu bentuk dasar (biasanya kata) yang dapat dipahami dan diolah oleh compiler. Pada bagian ini akan di bahas beberapa sintaks yang umum digunakan dalam bahasa C, selain itu akan bagian ini akan di bahas beberapa sintaks yang umum digunakan dalam bahasa C, selain itu akan dijelaskan bagaimana cara kerja compiler C secara umum. Sebelum melangkah lebih jauh, perlu anda dijelaskan bagaimana cara kerja compiler C secara umum. Sebelum melangkah lebih jauh, perlu anda ketahui bahwa C adalah bahasa pemrograman yang
ketahui bahwa C adalah bahasa pemrograman yang case sensitive, sehingga var, case sensitive, sehingga var, Var, dan VAR adalahVar, dan VAR adalah tiga hal yang berbeda pada bahasa C.
tiga hal yang berbeda pada bahasa C.
Preprocessor dan Macro
Preprocessor dan Macro
Preprocessor Preprocessor33
adalah bagian dari sebuah software development tool adalah bagian dari sebuah software development tool44
untuk bahasa C yang bertugas untuk bahasa C yang bertugas untukuntuk melakukan pengolahan source code sebelum diberikan kepada compiler untuk diolah lebih lanjut.
melakukan pengolahan source code sebelum diberikan kepada compiler untuk diolah lebih lanjut. Preprocessor pada dasarnya menerjemahkan source code yang kita buat ke bentuk yang
Preprocessor pada dasarnya menerjemahkan source code yang kita buat ke bentuk yang dapat dikenalidapat dikenali oleh compiler. Dalam bahasa C, ada beberapa keyword
oleh compiler. Dalam bahasa C, ada beberapa keyword55
yang sebenarnya tidak dikenali oleh compiler, yang sebenarnya tidak dikenali oleh compiler, umumnya keyword ini diawali dengan #,
umumnya keyword ini diawali dengan #, misalnya #macro,misalnya #macro,
#define
#define
,,#include
#include
, #pragma dan lain-, #pragma dan lain-lain, keyword inilah yang diolah oleh preprocessor. Preprocessor merupakan salah satu bagian Software lain, keyword inilah yang diolah oleh preprocessor. Preprocessor merupakan salah satu bagian Software Development Tool yang tergantung kepada vendor yang membuat tool tersebut, namun demikian, kita Development Tool yang tergantung kepada vendor yang membuat tool tersebut, namun demikian, kita akan membahas beberapa keyword yang umum diolah oleh preprocessor (telah di standarisasi). Keyword akan membahas beberapa keyword yang umum diolah oleh preprocessor (telah di standarisasi). Keyword yang diolah oleh preprocessor antara lain:yang diolah oleh preprocessor antara lain: Catatan:
Catatan:
3 3
Preprocessor juga ada dalam bahasa lain, tetapi yang kita maksud di sini
Preprocessor juga ada dalam bahasa lain, tetapi yang kita maksud di sini adalah preprocessor untukadalah preprocessor untuk bahasa C.
bahasa C.
4 4
Software development Tool misalnya Turbo C, Visual C++, Borland C++ Builder, GNU C dan
Software development Tool misalnya Turbo C, Visual C++, Borland C++ Builder, GNU C dan lain-lainlain-lain yang dapat mengolah source code C.
yang dapat mengolah source code C.
5
5Kata-kata yang mempunyai arti khusus dan digunakan secara internal oleh compiler.Kata-kata yang mempunyai arti khusus dan digunakan secara internal oleh compiler.
#include
#include
, keyword ini membuat kita seakan-akan telah mengetik isi , keyword ini membuat kita seakan-akan telah mengetik isi dari file yang dicantumkandari file yang dicantumkan sesudah keyword tersebut. Misalnya:sesudah keyword tersebut. Misalnya:
#include < stdio.h >
#include < stdio.h >
akan membuat preprocessorakan membuat preprocessor mengekspansikan file stdio.h pada tempat keywordmengekspansikan file stdio.h pada tempat keyword
#include
#include
tadi diketikkan.tadi diketikkan.#include
#include
mempunyaimempunyai dua macam bentuk yaitudua macam bentuk yaitu
#include
#include <...>
<...>
dandan#include
#include "..."
"..."
, titik-titik tersebut adalah nama, titik-titik tersebut adalah nama file.file.
#include
#include <...>
<...>
akan membuat preprocessor mencari file akan membuat preprocessor mencari file yang namanya dicantumkan di dalamyang namanya dicantumkan di dalam kurung pada direktori- direktori yang telkurung pada direktori- direktori yang tel ah didefinisikan oleh software development tool yang kitaah didefinisikan oleh software development tool yang kita gunakan, misalnya pada direktory
gunakan, misalnya pada direktory
INC, INCLUDE
INC, INCLUDE
, dan lain-lain., dan lain-lain.#include
#include "..."
"..."
akan membuatakan membuat preprocessor mencari file yang namanya dicantumkan di dalam tanda petik ganda pada direktori file preprocessor mencari file yang namanya dicantumkan di dalam tanda petik ganda pada direktori file yangyang memiliki keywordmemiliki keyword
#include
#include
tersebut. Misalnya anda mengerjakan file test.c yang ada pada direktoritersebut. Misalnya anda mengerjakan file test.c yang ada pada direktori bernama test, dan andabernama test, dan anda mengetikkanmengetikkan
#include "test.h"
#include
"test.h"
, maka preprocessor akan mencari file, maka preprocessor akan mencari file test.h pada direktori test.#define,
#define,
keyword ini mempunyai format:keyword ini mempunyai format:#define
#define identifier token-string
identifier token-string
optopt. Identifier. Identifier adalah nama sebuah konstanta yang akan kitaadalah nama sebuah konstanta yang akan kita gunakan dalam program kita, dangunakan dalam program kita, dan
token-string
token-string
adalah nilai dari identifier tersebut (nilaiadalah nilai dari identifier tersebut (nilai ini harus dapat dikenali oleh compiler),ini harus dapat dikenali oleh compiler),
token-string
token-string
dapatdapat merupakan sebuah ekspresi6. Preprocessor akan mengganti setiapmerupakan sebuah ekspresi6. Preprocessor akan mengganti setiap kemunculan identifier dengan nilaikemunculan identifier dengan nilai pada
pada
token-string
token-string
. Jika. Jikatoken-string
token-string
dikosongkan, maka identifier tadi akan hilang dari sourcedikosongkan, maka identifier tadi akan hilang dari source code program kita (pada baris-baris selanjutnya, identifier menjadi tidak dikenalicode program kita (pada baris-baris selanjutnya, identifier menjadi tidak dikenali sebab tidak memilikisebab tidak memiliki nilai lagi). Contoh:
nilai lagi). Contoh:
#define
#define a 0xff
a 0xff
akan membuat setiap kemunculan a dalam program, akan membuat setiap kemunculan a dalam program, misalnyamisalnyaFunction1(a)
Function1(a)
diganti dengandiganti dengan0xff
0xff
(255 desimal), dan jika sesudah baris Function1(a) ada baris(255 desimal), dan jika sesudah baris Function1(a) ada baris#define
#define
a , maka a sudah tidak akan dikenali lagi a , maka a sudah tidak akan dikenali lagi pada bagian selanjutnya. Dengan demikianpada bagian selanjutnya. Dengan demikian penggunaan a pada baris-baris selanjutnya adalah ilegalpenggunaan a pada baris-baris selanjutnya adalah ilegal (compiler akan memberikan pesan kesalahan(compiler akan memberikan pesan kesalahan saat program di buat/ di-compile). Jika pada
saat program di buat/ di-compile). Jika pada
#define identifier token-string
#define identifier token-string
optopt,,token-
token-string
string
merupakan sebuah ekspresi, maka identifier tersebut disebut sebagai makro. Makro akan diolahmerupakan sebuah ekspresi, maka identifier tersebut disebut sebagai makro. Makro akan diolah preprocessor, setiap kemunculanpreprocessor, setiap kemunculan
identifier
identifier
pada source code yang akan diganti dengan ekspresipada source code yang akan diganti dengan ekspresitoken-string
token-string
(jika baris source code tsb t(jika baris source code tsb t idak mengandungidak mengandung#
#
sebagai karakter pertamanya),sebagai karakter pertamanya), ekspresi ini kemudian diolah oleh compiler.ekspresi ini kemudian diolah oleh compiler. Catatan:
Catatan:
6
6Ekspresi adalah sekumpulan operator (misalnya +, -, dll) dan operand (variabel yangEkspresi adalah sekumpulan operator (misalnya +, -, dll) dan operand (variabel yang
dikenai operasi) yang mengerjakan salah satu kombinasi aktivitas berikut: Menghitung dikenai operasi) yang mengerjakan salah satu kombinasi aktivitas berikut: Menghitung nilai, memindahkan nilai ke dalam suatu objek atau fungsi (fungsi akan dijelaskan lebih nilai, memindahkan nilai ke dalam suatu objek atau fungsi (fungsi akan dijelaskan lebih lanjut), atau menghasilkan efek samping (misalnya membuat sebuah baris
lanjut), atau menghasilkan efek samping (misalnya membuat sebuah baris programprogram dieksekusi atau tidak).
dieksekusi atau tidak). Contoh:
Contoh: makro
makro
#define a ((c)*(d))
#define a ((c)*(d))
akan mengganti setiap kemunculan a dengan nilai hasil perkalianakan mengganti setiap kemunculan a dengan nilai hasil perkalian variabel c dan d. Tanda kurung yang banyak untuk memastikan bahwa makro kita dieksekusi sesuai variabel c dan d. Tanda kurung yang banyak untuk memastikan bahwa makro kita dieksekusi sesuai dengan yang kita inginkan, sebab ada yang disebut dengan operator precedence, yaitu urutan pengerjaan dengan yang kita inginkan, sebab ada yang disebut dengan operator precedence, yaitu urutan pengerjaan operator jika berbagai operator muncul dalam sebuah pernyataan. Misalnya:operator jika berbagai operator muncul dalam sebuah pernyataan. Misalnya:
a*b+c
a*b+c
, pada ekspresi ini,, pada ekspresi ini, yang akan diolah terlebih dulu adalah perkalian a dan b, kemudian hasilnya dijumlahkan dengan c. yang akan diolah terlebih dulu adalah perkalian a dan b, kemudian hasilnya dijumlahkan dengan c. makro dapat mempunyai parameter(nilai input). Berikutmakro dapat mempunyai parameter(nilai input). Berikut ini contohnya:ini contohnya:
#define kali(a,b) ((a)*(b))
#define kali(a,b) ((a)*(b))
....
....
int y = 20;
int y = 20;
int z = 90;
int z = 90;
int x = kali(y,z);
int x = kali(y,z);
Pada source code di atas, int
Pada source code di atas, int adalah tipe data variabel, kita akan belajar lebih adalah tipe data variabel, kita akan belajar lebih lanjut tentang hal ini. Saatlanjut tentang hal ini. Saat preprocessor menemukan ekspresi
preprocessor menemukan ekspresi
kali(y,z)
kali(y,z)
, maka nilai y dan z dari , maka nilai y dan z dari baris-baris sebelumnya akanbaris-baris sebelumnya akan menggantikan y dan z padamenggantikan y dan z pada
kali(y,z)
kali(y,z)
, kemudian, kemudiankali(y,z)
kali(y,z)
berubah menjadiberubah menjadi((y)*(z))
((y)*(z))
sehingga diperolehsehingga diperoleh
20x90 = 1800
20x90 = 1800
, kemudian hasil ini dipindahkan ke x (tanda = , kemudian hasil ini dipindahkan ke x (tanda = artinya pindahkanartinya pindahkan nilai di sebelah kanan tanda ini kenilai di sebelah kanan tanda ini ke variabel yang ada di sebelah kiri tanda ini).variabel yang ada di sebelah kiri tanda ini).
#if
#if
, keyword ini digunakan untuk menentukan pengolahan baris-baris source code sesudahnya, sampai, keyword ini digunakan untuk menentukan pengolahan baris-baris source code sesudahnya, sampai dengan keyworddengan keyword
#endif
#endif
. Formatnya adalah :. Formatnya adalah :#if
#if
expression , expression adalah sebuah ekspresi yangexpression , expression adalah sebuah ekspresi yang valid (dapat diolah oleh compiler). Jika evalid (dapat diolah oleh compiler). Jika e kspresi tersebut benar maka baris-baris source code sesudahkspresi tersebut benar maka baris-baris source code sesudah
#if
#if
akan diolah dan sebaliknya jika ekspresi tersebut bernilai akan diolah dan sebaliknya jika ekspresi tersebut bernilai salah. Keyword ini harus digunakansalah. Keyword ini harus digunakan bersama dengan keywordbersama dengan keyword
#endif
#endif
untuk menandakan batas penggunaan keyword tersebut dalam sourceuntuk menandakan batas penggunaan keyword tersebut dalam source code. Contoh: code. Contoh:#define TEST 2
#define TEST 2
#if (TEST > 0)
#if (TEST > 0)
...
...
baris source code;
baris source code;
#endif
#endif
Pada potongan program diatas, baris source code akan diolah sebab ekspresi
#ifdef
#ifdef
, keyword ini , keyword ini penggunaanpenggunaannya sama dengannya sama dengan#if
#if
. Formatnya:. Formatnya:#ifdef
#ifdef identifier
identifier
, identifier, identifier adalah sebuah konstanta. Jika identifieradalah sebuah konstanta. Jika identifier telah didefinisikan sebelumnya (dengan keywordtelah didefinisikan sebelumnya (dengan keyword
#define
#define
)) maka baris-baris source code sesudahmaka baris-baris source code sesudah
#ifdef
#ifdef
akan diolah oleh kompiler, demikian pula sebaliknya.akan diolah oleh kompiler, demikian pula sebaliknya. Keyword ini harusKeyword ini harus digunakan bersama dengan keyworddigunakan bersama dengan keyword
#endif
#endif
untuk menandakan batas penggunaanuntuk menandakan batas penggunaan keyword tersebut dalam source codekeyword tersebut dalam source code
#ifndef
#ifndef
, keyword ini mempunyai format yang sama dengan, keyword ini mempunyai format yang sama dengan#ifdef
#ifdef
, tetapi cara kerjanya adalah, tetapi cara kerjanya adalah kebalikan darikebalikan dari
#ifdef
#ifdef
, sehingga jika baris- baris program sesudahnya justru diolah jika identifier , sehingga jika baris- baris program sesudahnya justru diolah jika identifier tidaktidak didefinisikan sebelumnya. Keyword ini harus digunakan bersamadidefinisikan sebelumnya. Keyword ini harus digunakan bersama dengan keyworddengan keyword
#endif
#endif
untukuntuk menandakan batas penggunaan keyword tersebut dalam sourcemenandakan batas penggunaan keyword tersebut dalam source codecode
#endif
#endif
, keyword ini sebagai pembatas untuk menadakan bagian akhir dari source code yang akan, keyword ini sebagai pembatas untuk menadakan bagian akhir dari source code yang akan dikenai efek jika keyworddikenai efek jika keyword
#if
#if
,,#ifdef
#ifdef
dandan#ifndef
#ifndef
dievaluasi.dievaluasi.#undef
#undef
, adalah keyword untuk menonaktifkan identifier yang telah didefinisikan dengan, adalah keyword untuk menonaktifkan identifier yang telah didefinisikan dengan#define
#define
,, efeknya sama denganefeknya sama dengan
#define identifier
#define
identifier
. Dengan demikian kita . Dengan demikian kita dapat mendefinisikan kembalidapat mendefinisikan kembali identifier tadi setelah #undef.identifier tadi setelah #undef.
#else
#else
, keyword ini digunakan di antara keyword, keyword ini digunakan di antara keyword#if
#if
,,#ifdef
#ifdef
,,#ifndef
#ifndef
dengan keyworddengan keyword#endif
#endif
.. Jika ekspresi pada keywordJika ekspresi pada keyword
#if
#if
,,#ifdef
#ifdef
,,#ifndef
#ifndef
benar maka source code sesudah #else, tidak akanbenar maka source code sesudah #else, tidak akan dieksekusi,demikian pula sebaliknya.Contoh:dieksekusi,demikian pula sebaliknya.Contoh:
#define TEST 0
#define TEST 0
#if (TEST > 0)
#if (TEST > 0)
...
...
baris source code1;
baris source code1;
#else
#else
...
...
baris source code2;
baris source code2;
#endif
#endif
Pada potongan program diatas,Pada potongan program diatas,baris source code2;
baris source code2;
akan diolah sebab ekspresiakan diolah sebab ekspresiTEST
TEST
> 0
> 0
adalah salah.adalah salah.Compiler
Compiler
Compiler adalah bagian dari Software Development Tool yang kita gunakan, yang bertugas Compiler adalah bagian dari Software Development Tool yang kita gunakan, yang bertugas menerjemahkan source code yang telah diolah oleh prepocessor menjadi bahasa assembly yang menerjemahkan source code yang telah diolah oleh prepocessor menjadi bahasa assembly yang
selanjutnya akan diolah oleh assembler untuk dijadikan machine code yang dapat dieksekusi. Bahasa C selanjutnya akan diolah oleh assembler untuk dijadikan machine code yang dapat dieksekusi. Bahasa C dikatakan sebagai bahasa pemrograman yang portable, sebab
dikatakan sebagai bahasa pemrograman yang portable, sebab dengan memberikan switch tertentudengan memberikan switch tertentu kepada compiler C pada saat kompilasi dilakukan, compiler akan menghasilkan file assembly yang kepada compiler C pada saat kompilasi dilakukan, compiler akan menghasilkan file assembly yang berbeda, sesuai dengan tipe arsitektur yang kita pil
berbeda, sesuai dengan tipe arsitektur yang kita pil ih (dengan menggunakan switch tersebut), namunih (dengan menggunakan switch tersebut), namun kemampuan ini juga tergantung kepada Software development Tool yang kita gunakan.
kemampuan ini juga tergantung kepada Software development Tool yang kita gunakan.
Linker
Linker
Linker adalah bagian dari Software development Tool yang bertugas mengubah format machine code yang Linker adalah bagian dari Software development Tool yang bertugas mengubah format machine code yang dihasilkan oleh assembler menjadi instruksi yang dapat dieksekusi. Jadi sebenarnya assembler tidak dihasilkan oleh assembler menjadi instruksi yang dapat dieksekusi. Jadi sebenarnya assembler tidak menghasilkan sebuah program yang dapat dieksekusi. Sebuah file
menghasilkan sebuah program yang dapat dieksekusi. Sebuah file yang dapat dieksekusi mempunyaiyang dapat dieksekusi mempunyai format header tertentu, dan dari satu sistem
format header tertentu, dan dari satu sistem operasi ke sistem operasi yang lain operasi ke sistem operasi yang lain formatnya berbeda-beda.formatnya berbeda-beda. Linker juga mempunyai fungsi lain,
Linker juga mempunyai fungsi lain, yaitu menyatukan komponen-komponen dari software yang kita yaitu menyatukan komponen-komponen dari software yang kita buatbuat ke dalam file executable yang nantinya akan dihasilkan setelah melalui linker,
ke dalam file executable yang nantinya akan dihasilkan setelah melalui linker, misalnya software tersebutmisalnya software tersebut mempunyai komponen eksternal seperti resource pada windows, resource sebenarnya bukan bagian dari mempunyai komponen eksternal seperti resource pada windows, resource sebenarnya bukan bagian dari program yang dieksekusi tetapi ikut disertakan dalam program karena dibutuhkan , contoh resource: program yang dieksekusi tetapi ikut disertakan dalam program karena dibutuhkan , contoh resource: ikonikon yang akan ditampilkan pada sebuah program. Komponen
yang akan ditampilkan pada sebuah program. Komponen lain yang kadang-kadang disatukan oleh linkerlain yang kadang-kadang disatukan oleh linker adalah dll (dynamic link library) yang disatukan secara "static" ke
adalah dll (dynamic link library) yang disatukan secara "static" ke dalam file executable, selain itu linkerdalam file executable, selain itu linker juga menyatukan file objek (obj) diluar file
juga menyatukan file objek (obj) diluar file objek yang kita hasilkan jika dibutuhkan oleh program kita keobjek yang kita hasilkan jika dibutuhkan oleh program kita ke dalam executable yang akan dibentuk.
Pernyataan
Pernyataan
dalam bahasa C adalah sebuah baris program yang dapat diproses oleh compiler. Pernyataan diakhiri dalam bahasa C adalah sebuah baris program yang dapat diproses oleh compiler. Pernyataan diakhiri dengan tanda
dengan tanda
;
;
(titik-koma). Setiap pernyataan dapat berisi beberapa ekspresi, operator maupun(titik-koma). Setiap pernyataan dapat berisi beberapa ekspresi, operator maupun operand. Contoh:operand. Contoh:
return;
return;
Sekelompok pernyataan yang disatukan dalam sebuah kurung kurawal (kadang
Sekelompok pernyataan yang disatukan dalam sebuah kurung kurawal (kadang di sebut sebagaidi sebut sebagai block of block of statement
statement atauatau blok pernyataanblok pernyataan ) juga diperlakukan seperti sebuah pernyataan biasa, hal ini terutama) juga diperlakukan seperti sebuah pernyataan biasa, hal ini terutama berguna saat anda akan mengatur e
berguna saat anda akan mengatur e ksekusi sekelompok pernyataan dalam sebuah percabangan sepertiksekusi sekelompok pernyataan dalam sebuah percabangan seperti contoh di bawah ini:
contoh di bawah ini:
if (a > b)
if (a > b)
{
{
pernyataan 1;
pernyataan 1;
pernyataan 2;
pernyataan 2;
pernyataan 3;
pernyataan 3;
}
}
jika ekspresi didalam kurung sesudahjika ekspresi didalam kurung sesudahif ( ekspresi a > b)
if ( ekspresi a > b)
bernilai benar maka seluruhbernilai benar maka seluruh pernyataan di dalam kurung kurawal akan dieksekusi. Sebenarnya keyword ifpernyataan di dalam kurung kurawal akan dieksekusi. Sebenarnya keyword if hanya dapat hanya dapat mengeksekusimengeksekusi satu pernyataan sesudah ekspresi yang diuji olehnya ( pada contoh di
satu pernyataan sesudah ekspresi yang diuji olehnya ( pada contoh di atas ekspresiatas ekspresi
a > b
a > b
), namun), namun dengan adanya kurung kurawal, pernyataan 1 s/ddengan adanya kurung kurawal, pernyataan 1 s/d pernyataan 3 seolah-olahpernyataan 3 seolah-olah dianggap satu pernyataandianggap satu pernyataan saja
saja oleh compiler yang kita gunakan.oleh compiler yang kita gunakan.
Variabel
Variabel
adalah sebuah simbol yang mewakili sebuah alamat di memory yang nilainya dapat dimanipulasi melalui adalah sebuah simbol yang mewakili sebuah alamat di memory yang nilainya dapat dimanipulasi melalui nama tersebut dan mempunyai ukuran tertentu. Ukuran ini disebut tipe data. Tipe data
nama tersebut dan mempunyai ukuran tertentu. Ukuran ini disebut tipe data. Tipe data yang berbedayang berbeda kemungkinan mempunyai ukuran yang berbeda. Sintaks untuk mendeklarasikan (menyatakan pertama kemungkinan mempunyai ukuran yang berbeda. Sintaks untuk mendeklarasikan (menyatakan pertama kali adanya sebuah variabel) adalah:
kali adanya sebuah variabel) adalah:
tipe-data NamaVariabel
tipe-data NamaVariabel
Contoh:
Contoh:
int variabel1;
int variabel1;
Berikut ini adalah tipe data danBerikut ini adalah tipe data dan ukurannya.ukurannya.
Tipe data
Tipe data
Ukuran
Ukuran
(byte)
(byte)
Contoh
Contoh
bool
bool
1
1
bool
bool a
a =
= true
true ;
; bool
bool b
b =
= false
false
i
in
nt
t,
, u
un
ns
si
ig
gn
ne
ed
d i
in
nt
t
4
4
i
in
nt
t a
a =
= -
-2
25
55
5 ;
; u
un
ns
si
ig
gn
ne
ed
d i
in
nt
t b
b =
= 1
10
0
c
ch
ha
ar
r,
, u
un
ns
si
ig
gn
ne
ed
d c
ch
ha
ar
r 1
1
c
ch
ha
ar
r a
a =
= -
-1
1 ;
; u
un
ns
si
ig
gn
ne
ed
d c
ch
ha
ar
r b
b =
= 1
1
long, unsigned long 4
long, unsigned long 4
long c = 0xFF ; unsigned long d =
long c = 0xFF ; unsigned long d =
0xFFC
0xFFC
short, unsigned
short, unsigned
short
short
2
2
short e = 0xFFF ; unsigned short f =
short e = 0xFFF ; unsigned short f =
067
067
f
fl
lo
oa
at
t
4
4
f
fl
lo
oa
at
t
g
g
=
=
0
0.
.0
00
01
1
d
do
ou
ub
bl
le
e
8
8
d
do
ou
ub
bl
le
e
h
h
=
=
1
1.
.0
02
2e
e8
8
l
lo
on
ng
g d
do
ou
ub
bl
le
e
8
8
l
lo
on
ng
g d
do
ou
ub
bl
le
e h
h =
= 2
2.
.4
42
2e
e1
10
0
Variabel bertipeVariabel bertipe
bool
bool
hanya mempunyai dua nilai yaituhanya mempunyai dua nilai yaitu truetrue atauatau falsefalse, jadi anda hanya dapat, jadi anda hanya dapat mengisinya dengan nilai ini. Perlu diperhatikan bahwa variabel bertipemengisinya dengan nilai ini. Perlu diperhatikan bahwa variabel bertipe
bool
bool
dianggap bernilai false jikadianggap bernilai false jika nilainya 0 , dan benar jikanilainya 0 , dan benar jika nilainyanilainya
>= 1
>= 1
. Mungkin anda bertanya, mengapa untuk dua alternatif saja. Mungkin anda bertanya, mengapa untuk dua alternatif saja kita menggunakan 1 byte (8 bit) padahal untuk 2 alternatifkita menggunakan 1 byte (8 bit) padahal untuk 2 alternatif hanya dibutuhkan 1 bit, hal ini disebabkanhanya dibutuhkan 1 bit, hal ini disebabkan oleh arsitektur kebanyakan microprocessor saat ini adalah "byte addessable", maksudnya nilai variabel oleh arsitektur kebanyakan microprocessor saat ini adalah "byte addessable", maksudnya nilai variabel terkecil yang dapat ditangani oleh microprocessor tersebut
terkecil yang dapat ditangani oleh microprocessor tersebut adalah byte. Variabel bertipeadalah byte. Variabel bertipe
int
int
(integer/bilangan bulat) dan(integer/bilangan bulat) dan
unsigned int
unsigned int
(unsigned integer/bilangan bulat positif) hanya dapat diisi(unsigned integer/bilangan bulat positif) hanya dapat diisi dengan bilangan yang bernilai bulat (tidak ada nilai di belakang koma atau pecahan) termasuk 0. Pada dengan bilangan yang bernilai bulat (tidak ada nilai di belakang koma atau pecahan) termasuk 0. Padasistem operasi windows variabel dengan tipe ini memiliki
sistem operasi windows variabel dengan tipe ini memiliki nilai 32 bit (4 byte), sehingga untuk unsigned intnilai 32 bit (4 byte), sehingga untuk unsigned int nilai maksimumnya adalah 2
nilai maksimumnya adalah 23232
-1 (karena ada 0), int nilainya berada pada kisaran -(2 -1 (karena ada 0), int nilainya berada pada kisaran -(21616
) sampai 2 ) sampai 21616
-1 -1 (karena ada 0). Untuk variabel yang tipenya lain tentunya anda sudah dapat menghitung sendiri nilai (karena ada 0). Untuk variabel yang tipenya lain tentunya anda sudah dapat menghitung sendiri nilai kisarannya, karena semuanya analog dengan tipe data int. Anda hanya perlu mengetahui jumlah bit yang kisarannya, karena semuanya analog dengan tipe data int. Anda hanya perlu mengetahui jumlah bit yang digunakan variabel tersebut dan untuk yang signed, nilai negatif yang paling kecilnya adalah - (2
digunakan variabel tersebut dan untuk yang signed, nilai negatif yang paling kecilnya adalah - (2(jumlah bit tipe(jumlah bit tipe data tsb/2)
data tsb/2)) dan nilai maksimum positifnya adalah 2) dan nilai maksimum positifnya adalah 2 (jumlah bit tipe data tsb/2)(jumlah bit tipe data tsb/2)-1 (karena ada 0). Namun demikian, ada-1 (karena ada 0). Namun demikian, ada
tiga tipe variabel yang t
tiga tipe variabel yang t idak termasuk ke dalam golongan yang memenuhi aturan ini, yaituidak termasuk ke dalam golongan yang memenuhi aturan ini, yaitu
float,
float,
double
double
dandanlong double
long double
. Ketiga tipe ini adalah tipe variabel. Ketiga tipe ini adalah tipe variabel floating point floating point , yaitu variable yang, yaitu variable yang dinyatakan dalamdinyatakan dalam mantissamantissa dandan eksponeneksponen. Mantissa adalah faktor pengali, . Mantissa adalah faktor pengali, dan eksponen adalah bilangandan eksponen adalah bilangan berpangkat 10 yang dikalikan dengan
berpangkat 10 yang dikalikan dengan mantissa tersebut. Misalnya 1,045x10e5 , pada bilangan inimantissa tersebut. Misalnya 1,045x10e5 , pada bilangan ini mantissa adalah 1,045 sedangkan eksponennya adalah 10e5 (10
mantissa adalah 1,045 sedangkan eksponennya adalah 10e5 (1055). Pada prakteknya variabel tipe floating). Pada prakteknya variabel tipe floating
point ditangani oleh bagian FPU (Floating Point Unit/Math Coprocessor) pada microprocessor kita. Pada point ditangani oleh bagian FPU (Floating Point Unit/Math Coprocessor) pada microprocessor kita. Pada variabel floating point
variabel floating point anda dapat memasukan data dengan nilai pecahan yang anda dapat memasukan data dengan nilai pecahan yang dikalikan dengandikalikan dengan eksponesial, misalnya 1,5x10
eksponesial, misalnya 1,5x103232
.Tipe data floating point
.Tipe data floating point nilai maksimum dan minimumnya tergantung padanilai maksimum dan minimumnya tergantung pada Software Development Tool yang kita gunakan, pada Visual C++ , kisarannya sebagai berikut: float Software Development Tool yang kita gunakan, pada Visual C++ , kisarannya sebagai berikut: float mempunyai nilai antara 10
mempunyai nilai antara 10-308-308s/d 10s/d 10308308, double , double mempunyai nilai antara -1.79769313486231x10mempunyai nilai antara -1.79769313486231x10308308s/ds/d
-4.94065645841247x10 -4.94065645841247x10-324-324
untuk bilangan negatif,
untuk bilangan negatif, dan 4.94065645841247x10dan 4.94065645841247x10-324-324
s/d s/d 1.79769313486231x10
1.79769313486231x10308308untuk bilangan positif, dan 0. Pada beberapa sistem long double dan doubleuntuk bilangan positif, dan 0. Pada beberapa sistem long double dan double
mempunyai ukuran berbeda, tetapi pada
mempunyai ukuran berbeda, tetapi pada Microsoft Visual C++, keduanya adalah identik. Microsoft Visual C++, keduanya adalah identik. Pada saatPada saat menentukan tipe data sebuah variabel
menentukan tipe data sebuah variabel yang akan anda gunakan anda harus memperhatikan nilaiyang akan anda gunakan anda harus memperhatikan nilai maksimum atau minimum yang dapat ditampung oleh tipe data tersebut agar tidak terjadi
maksimum atau minimum yang dapat ditampung oleh tipe data tersebut agar tidak terjadi kesalahankesalahan perhitungan, nilai dari variabel tersebut harus kurang dari atau sama dengan nilai maksimum yang dapat perhitungan, nilai dari variabel tersebut harus kurang dari atau sama dengan nilai maksimum yang dapat ditampung oleh tipe data tersebut. Anda juga dapat memasukkan bilangan bukan desimal(basis 10) ke ditampung oleh tipe data tersebut. Anda juga dapat memasukkan bilangan bukan desimal(basis 10) ke dalam variabel yang bukan floating
dalam variabel yang bukan floating point. Misalnya, anda dapat memasukkan nilai heksa desimal point. Misalnya, anda dapat memasukkan nilai heksa desimal (basis(basis 16) seperti
16) seperti
0xFF
0xFF
, bilangan octal (basis 8) seperti, bilangan octal (basis 8) seperti0223
0223
. Selain sifat ini, variabel dengan tipe . Selain sifat ini, variabel dengan tipe data chardata char mempunyai sifat tersendiri, yaitu anda dapat memasukkan sekumpulan ke dalam variabel tersebut, mempunyai sifat tersendiri, yaitu anda dapat memasukkan sekumpulan ke dalam variabel tersebut, misalnya pada potongan source code berikut:misalnya pada potongan source code berikut:
char message = "Ini adalah string"
char message = "Ini adalah string"
variabel char dengan deklarasi seperti di atas
variabel char dengan deklarasi seperti di atas sering di sebut string, sebab menyimpan sekumpulansering di sebut string, sebab menyimpan sekumpulan karakter, nilai variabel ini tidak
karakter, nilai variabel ini tidak begitu penting sebab yang kita simpan bukan merupakan nilai yang akanbegitu penting sebab yang kita simpan bukan merupakan nilai yang akan dioperasikan.
dioperasikan.
Variabel memiliki apa yang disebut
Variabel memiliki apa yang disebut variable scopevariable scope. Variable scope adalah daerah di dalam source code. Variable scope adalah daerah di dalam source code tempat sebuah variabel masih dikenali/terlihat oleh compiler. Misalnya seperti i
tempat sebuah variabel masih dikenali/terlihat oleh compiler. Misalnya seperti i ni: anda mendeklarasikanni: anda mendeklarasikan sebuah variabel di dalam sebuah fungsi di luar fungsi
sebuah variabel di dalam sebuah fungsi di luar fungsi
main(),
main(),
maka variabel tersebut hanya memilikimaka variabel tersebut hanya memiliki scope pada fungsi itu saja, sebab di luarscope pada fungsi itu saja, sebab di luar fungsi tersebut variabel tersebut tidak akan dikenali fungsi tersebut variabel tersebut tidak akan dikenali oleholeh compiler. Variabel seperti ini biasa disebut
compiler. Variabel seperti ini biasa disebut variabel lokal. Kasus kedua adalah variabel yang dideklarasikanvariabel lokal. Kasus kedua adalah variabel yang dideklarasikan diluar semua fungsi, variabel seperti ini mempunyai scope dikeseluruhan source code yang kita
diluar semua fungsi, variabel seperti ini mempunyai scope dikeseluruhan source code yang kita miliki.miliki. Variabel seperti ini biasa juga disebut
Variabel seperti ini biasa juga disebut variabel global sebab variabel ini dikenali di variabel global sebab variabel ini dikenali di dalam fungsi manapundalam fungsi manapun dalam program kita, termasuk fungsi
dalam program kita, termasuk fungsi
main()
main()
. Implikasi dari adanya variabel global dan lokal adalah:. Implikasi dari adanya variabel global dan lokal adalah: 1.1. Anda tidAnda tidak dapaak dapat menggut menggunakanakan nama varn nama variabel yaniabel yang sama ung sama untuk sebuatuk sebuah variabh variabel global dael global dan lokaln lokal sebab compiler akan menganggap variabel tersebut dideklarasikan 2 kali dan hal ini
sebab compiler akan menganggap variabel tersebut dideklarasikan 2 kali dan hal ini tidaktidak dibolehkan oleh compiler C.
dibolehkan oleh compiler C. 2.
2. Anda tiAnda tidak dapdak dapat mengat menggunagunakan varikan variabel lokabel lokal di luar fual di luar fungsi temngsi tempat vapat variabel terriabel tersebutsebut dideklarasikan, sebab variabel tersebut tidak akan dikenali oleh compiler.
dideklarasikan, sebab variabel tersebut tidak akan dikenali oleh compiler. Untuk memperjelas, akan diberikan contoh sebagai berikut:
Untuk memperjelas, akan diberikan contoh sebagai berikut:
#include <stdio.h>
#include <stdio.h>
#define UINT unsigned int
#define UINT unsigned int
/* deklarasi fungsi kali */
/* deklarasi fungsi kali */
UINT kali(UINT a, UINT b);
UINT kali(UINT a, UINT b);
UINT var_test;
UINT var_test;
void main()
void main()
{
{
UINT faktor1 = 10;
UINT faktor1 = 10;
UINT faktor2 = 20;
UINT faktor2 = 20;
UINT hasil ;
UINT hasil ;
hasil = kali(faktor1,faktor2);
hasil = kali(faktor1,faktor2);
printf("%d \n",hasil);
printf("%d \n",hasil);
}
}
UINT kali(UINT a, UINT b)
UINT kali(UINT a, UINT b)
{
{
UINT hasil = 30;
UINT hasil = 30;
UINT c = a*b;
UINT c = a*b;
return c;
return c;
}
}
Pada source code di atas,
Pada source code di atas,
var_test
var_test
adalah variabel global, sebab variabel ini dideklarasikan di luaradalah variabel global, sebab variabel ini dideklarasikan di luar semua fungsi. Variabelsemua fungsi. Variabel
faktor1
faktor1
,,faktor2
faktor2
dan hasil adalah variabel lokal pada fungsidan hasil adalah variabel lokal pada fungsimain()
main()
.. VariabelVariabel
hasil
hasil
yang ada pada fungsi kali adalah variabel lokal, yang berbeda dengan variabelyang ada pada fungsi kali adalah variabel lokal, yang berbeda dengan variabelhasil
hasil
yang ada pada fungsiyang ada pada fungsi
main()
main()
sebab scope kedua variabel tersebut adalah berbeda. Anda perlusebab scope kedua variabel tersebut adalah berbeda. Anda perlumemperhatikan hal seperti ini saat anda membuat program, sebab jika anda dengan seenaknya memberi memperhatikan hal seperti ini saat anda membuat program, sebab jika anda dengan seenaknya memberi nama pada variabel yang anda gunakan tanpa memperhatikan scope dari variabel tersebut, bisa-bisa nama pada variabel yang anda gunakan tanpa memperhatikan scope dari variabel tersebut, bisa-bisa program anda tidak dapat di-compile.
program anda tidak dapat di-compile.
Operator
Operator
Operator
Operator adalah karakter atau kumpulan karakter yang adalah karakter atau kumpulan karakter yang digunakan untuk memanipulasi variabel. Karakterdigunakan untuk memanipulasi variabel. Karakter atau kumpulan karakter ini dikenali secara spesifik oleh compiler
atau kumpulan karakter ini dikenali secara spesifik oleh compiler sehingga variabel yang diubah-ubahsehingga variabel yang diubah-ubah nilainya(operand) akan dikenai operasi sesuai dengan definisi operasi yang dimiliki oleh operator nilainya(operand) akan dikenai operasi sesuai dengan definisi operasi yang dimiliki oleh operator tadi.tadi. Dalam bahasa C ada tiga golongan besar operator, yaitu:
Dalam bahasa C ada tiga golongan besar operator, yaitu: unary operator
unary operator, operator ini hanya bekerja pada satu ope, operator ini hanya bekerja pada satu ope rand. Unary operator antara lain:rand. Unary operator antara lain:
Operator
Operator
Unary
Unary
Kegunaan
Kegunaan
- ~ !
- ~ !
Operator ini melakukan operasi negasi, yaitu merubah nilai operand
Operator ini melakukan operasi negasi, yaitu merubah nilai operand
menjadi nilai yang berlawanan tanda. Disebut juga Negation atau
menjadi nilai yang berlawanan tanda. Disebut juga Negation atau
complement operator
complement operator
++
++
Operator ini menaikkan nilai operand 1 satuan, disebut juga
Operator ini menaikkan nilai operand 1 satuan, disebut juga
increment operator.
increment operator.
----
Operator ini menurunkan nilai operand 1 satuan, disebut juga
Operator ini menurunkan nilai operand 1 satuan, disebut juga
decrement operator.
decrement operator.
*
*
Operator ini memberikan nilai yang tersimpan pada alamat memory
Operator ini memberikan nilai yang tersimpan pada alamat memory
yang ditunjuk oleh operand, disebut juga indirection operator.
yang ditunjuk oleh operand, disebut juga indirection operator.
Biasanya digunakan dalam operasi dengan pointer (akan dijelaskan
Biasanya digunakan dalam operasi dengan pointer (akan dijelaskan
lebih lanjut)
lebih lanjut)
&
&
Operator ini memberikan alamat memory operand. Biasanya
Operator ini memberikan alamat memory operand. Biasanya
digunakan dalam operasi dengan pointer (akan dijelaskan lebih
digunakan dalam operasi dengan pointer (akan dijelaskan lebih
lanjut). Disebut juga address of operator.
lanjut). Disebut juga address of operator.
sizeof
sizeof
(operand
(operand
)
)
Operator ini memberikan ukuran memory yang digunakan operand
Operator ini memberikan ukuran memory yang digunakan operand
dalam byte.
dalam byte.
operand
operand
adalah operand yang ukurannya akan dicari.
adalah operand yang ukurannya akan dicari.
binary operator
binary operator, operator ini bekerja pada , operator ini bekerja pada dua operand sekaligus. Operator binary antara lain:dua operand sekaligus. Operator binary antara lain:
Operator
Operator
Binary
Binary
Kegunaan
Kegunaan
Operator Matematis Operator Matematis