Setiap programmer C memulai perjalanan dengan program yang sama: mencetak teks ke layar. Program “Halo, Dunia!” memang terlihat sederhana, tetapi di baliknya terdapat konsep penting seperti struktur file, fungsi main, header standar, dan konvensi keluaran. Pada Chapter ini kita akan menulis, mengompilasi, dan menjalankan program C pertama kita, lalu membedah setiap barisnya untuk memahami apa yang sebenarnya terjadi.

Struktur Dasar Program C #

Setiap program C yang bisa dijalankan minimal memiliki satu fungsi bernama main. Fungsi main adalah titik masuk yang dipanggil sistem operasi ketika executable dijalankan. Tanpa main, linker akan mengeluh tidak menemukan entry point.

Bentuk paling sederhana program C adalah:

c
#include <stdio.h>

int main(void) {
    printf("Halo, Dunia!\n");
    return 0;
}

Output yang Dihasilkan:

text
Halo, Dunia!

Mari kita telaah baris-baris kode di atas:

  1. Baris 1 (#include <stdio.h>): direktif preprocessor yang menyertakan header Standard Input/Output. Header ini berisi deklarasi fungsi printf yang kita pakai untuk mencetak teks.
  2. Baris 3 (int main(void)): deklarasi fungsi main dengan tipe kembalian int. Tanda void di parameter menyatakan fungsi main tidak menerima argumen dari caller (sistem operasi).
  3. Baris 4 ({): tanda kurung kurawal buka menandai awal tubuh fungsi.
  4. Baris 5 (printf("Halo, Dunia!\n");): memanggil fungsi printf untuk mencetak string literal "Halo, Dunia!\n" ke standard output. Karakter \n adalah escape sequence yang menghasilkan baris baru.
  5. Baris 6 (return 0;): mengembalikan nilai 0 ke sistem operasi; nilai 0 berarti program berakhir sukses.
  6. Baris 7 (}): tanda kurung kurawal tutup menandai akhir tubuh fungsi.

Kompilasi dan Eksekusi #

Simpan kode di atas ke file halo.c, lalu kompilasi dan jalankan:

bash
gcc -std=c11 -Wall -Wextra -o halo halo.c
./halo

Output yang Dihasilkan:

text
Halo, Dunia!

Perintah gcc mengubah file sumber halo.c menjadi executable halo. Prefiks ./ diperlukan saat menjalankan executable di direktori kerja saat ini karena shell Linux tidak mencari executable di direktori kerja saat ini secara default.

Menampilkan Variabel dengan Format Specifier #

Program pertama hanya mencetak teks tetap. Selanjutnya, kita akan mencetak nilai variabel. Fungsi printf mendukung format specifier yang mengganti placeholder dengan nilai variabel yang kita berikan.

c
#include <stdio.h>

int main(void) {
    char nama[] = "Budi";
    int umur = 17;
    float tinggi = 168.5f;

    printf("Nama    : %s\n", nama);
    printf("Umur    : %d tahun\n", umur);
    printf("Tinggi  : %.1f cm\n", tinggi);
    return 0;
}

Output yang Dihasilkan:

text
Nama    : Budi
Umur    : 17 tahun
Tinggi  : 168.5 cm

Mari kita telaah baris-baris kode di atas:

  1. Baris 4 (char nama[] = "Budi";): array karakter otomatis diisi string literal "Budi"; compiler menentukan ukuran array menjadi 5 (4 karakter + terminator null).
  2. Baris 5 (int umur = 17;): variabel bertipe int diisi nilai 17.
  3. Baris 6 (float tinggi = 168.5f;): variabel bertipe float diisi 168.5; akhiran f menandakan literal bertipe float, bukan double.
  4. Baris 8 (%s): format specifier untuk mencetak string; printf membaca argumen nama sebagai pointer ke char.
  5. Baris 9 (%d): format specifier untuk int.
  6. Baris 10 (%.1f): format specifier untuk float/double dengan satu digit di belakang koma.

Menggabungkan Beberapa printf #

Beberapa pemanggilan printf dapat dipecah agar kode lebih rapi. Kita juga bisa menyertakan beberapa argumen sekaligus dalam satu pemanggilan printf:

c
#include <stdio.h>

int main(void) {
    printf("== Program Pertama ==\n");
    printf("Bahasa : C\n");
    printf("Standar: C11\n");
    printf("Compiler: GCC %d.%d.%d\n",
           __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
    printf("=====================\n");
    return 0;
}

Output yang Dihasilkan:

text
== Program Pertama ==
Bahasa : C
Standar: C11
Compiler: GCC 14.2.0
=====================

Mari kita telaah baris-baris kode di atas:

  1. Baris 4-6 (printf(...)): tiga pemanggilan terpisah yang masing-masing mencetak satu baris teks tetap.
  2. Baris 7-8 (printf("...%d.%d.%d\n", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)): satu pemanggilan printf dengan tiga format specifier %d dan tiga argumen yang bersesuaian; tiga makro GCC menyatakan versi compiler.
  3. Baris 9 (printf("=====================\n");): mencetak garis pemisah yang di dalamnya hanya ada karakter =.
  4. Baris 10 (return 0;): program berakhir sukses.

Latihan Mandiri #

Sebelum lanjut ke bab berikutnya, coba modifikasi program pertama dengan latihan-latihan berikut:

  1. Ganti teks "Halo, Dunia!" menjadi "Halo, [nama kamu]!" dan kompilasi ulang.
  2. Tambahkan dua variabel int a = 5; dan int b = 7;, lalu cetak hasil a + b memakai printf("Hasil: %d\n", a + b);.
  3. Coba hilangkan tanda titik koma di akhir baris printf pertama dan baca pesan kesalahan compiler.
  • Latihan ketiga di atas sengaja memicu kesalahan agar kita terbiasa membaca pesan compiler. Pesan expected ‘;’ before ‘}’ token terlihat menakutkan bagi pemula, tetapi sebenarnya menunjuk lokasi yang sangat spesifik: compiler menemukan } ketika mengharapkan akhir pernyataan dengan ;.
  • Hindari kebiasaan menulis void main() alih-alih int main(void). Tanda void di kembalian main bukan standar ISO C yang sah dan dapat menyebabkan perilaku tak terdefinisi pada beberapa sistem operasi. Gunakan selalu int main(void) untuk program tanpa argumen command line.