โš™๏ธ Compilation Process

Bagaimana kode C berubah menjadi program yang bisa dijalankan?

Saat kita menulis program dalam bahasa C, yang kita buat adalah source code (kode sumber) dengan ekstensi .c.

Namun, komputer tidak memahami bahasa C secara langsung โ€” komputer hanya memahami machine code yang berbentuk angka biner (0 dan 1).

Agar program C dapat dijalankan, source code harus melewati serangkaian proses hingga menjadi executable file (.exe, .out). Proses ini disebut Compilation Process.

๐Ÿ”„ Tahapan dalam Proses Kompilasi

Proses kompilasi bahasa C umumnya terdiri dari 4 tahap utama:

Source Code (.c) โ†“ Preprocessor โ†“ Compiler โ†“ Assembler โ†“ Object File (.o / .obj) โ†“ Linker โ†“ Executable Program (.exe / .out)

๐Ÿงฉ 1. Preprocessing Phase

Pada tahap ini, compiler memproses perintah yang diawali dengan tanda # (preprocessor directives).

DirectiveFungsi
#includeMengimpor file header (misalnya stdio.h)
#defineMembuat macro atau konstanta
#if, #endifConditional compilation

โš ๏ธ Tahap ini belum memeriksa kesalahan syntax.

Source Code:
#include <stdio.h> #define PI 3.14 int main() { printf("Nilai PI = %f", PI); return 0; }
Hasil Preprocess (.i):
// Isi file stdio.h disalin ke sini... // ... int main() { printf("Nilai PI = %f", 3.14); return 0; }

๐Ÿงฉ 2. Compilation (Translation to Assembly)

Pada tahap ini compiler:

  • Mengecek syntax error (titik koma hilang, variabel belum dideklarasi, dll).
  • Mengubah source code hasil preprocess menjadi kode assembly (bahasa tingkat rendah yang dipahami CPU).

Output tahap ini biasanya berupa file .s.

๐Ÿงฉ 3. Assembly Phase

Assembler mengubah kode assembly menjadi object code, yaitu kode mesin yang sudah dalam format biner tetapi belum lengkap.

Output berupa file:

  • .o (Linux/macOS)
  • .obj (Windows)
Contoh isi (biner): 10110010 00001101 01010110 ...

๐Ÿงฉ 4. Linking Phase

Object file belum bisa dijalankan karena belum terhubung dengan library (seperti printf, scanf, dll).

Linker bertugas untuk:

  • โœ” Menggabungkan object file dengan library sistem.
  • โœ” Menghilangkan fungsi yang tidak digunakan.
  • โœ” Membuat file executable akhir (.exe atau .out).

๐Ÿงช Contoh Kasus: Dari Kode ke Executable

Misalkan kita punya file hello.c:

#include <stdio.h> int main() { printf("Hello World"); return 0; }

Jika dikompilasi dengan GCC: gcc hello.c -o hello

Tahap Output Nama File
PreprocessingExpanded codehello.i
CompilationAssembly codehello.s
AssemblyObject codehello.o
LinkingExecutablehello.exe / ./hello

โš ๏ธ Kesalahan Umum

ErrorPenyebab
Syntax errorSalah ketik, kurang ;
Undefined referenceLinker gagal temukan library
Undeclared variableVariabel belum dibuat

๐ŸŽ“ Ringkasan

  • Preprocessing .i
  • Compilation .s
  • Assembly .o
  • Linking .exe

๐Ÿ Penutup

Proses kompilasi adalah fondasi penting dalam memahami bagaimana program C bekerja di sistem komputer. Pemahaman ini berguna terutama saat debugging, optimasi program, atau ketika bekerja di lingkungan embedded systems.