Menu

Sintaks C: Struktur Program C dan Penjelasannya

Setiap program C punya kerangka yang sama: include, fungsi main, pernyataan yang diakhiri titik koma, dan blok di dalam kurung kurawal. Berikut fungsi setiap bagian dan aturan yang benar-benar diperiksa compiler.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Sintaks yang perlu dipelajari di C sangat sedikit: sekitar 32 kata kunci dan beberapa aturan tanda baca. Hampir setiap program yang akan kamu tulis punya bentuk luar yang sama, jadi bentuk itu layak dibongkar sekali dengan teliti.

Program Lengkap Paling Kecil

Program ini bisa dikompilasi, dijalankan, dan tidak melakukan apa-apa:

Tanpa include, tanpa output, tanpa class atau module boilerplate. main adalah titik masuk: saat sistem operasi menjalankan programmu, ia memanggil main. Saat main mengembalikan nilai, program berakhir, dan nilai yang dikembalikan itu menjadi status keluar.

Tambahkan output dan kamu butuh satu include:

Direktif Preprocessor

Baris yang diawali # ditangani sebelum kompilasi yang sebenarnya, oleh preprocessor. Baris itu bukan pernyataan C, dan tidak memakai titik koma.

#include <stdio.h>    /* standard library header - angle brackets */
#include "myutils.h"  /* your own header - quotes, searched locally first */
#define MAX 100       /* a macro - MAX is replaced by 100 everywhere below */

#include benar-benar menempelkan teks: seluruh isi file yang disebut dimasukkan di titik itu. stdio.h berisi deklarasi printf, dan dari situlah compiler tahu argumen apa yang diterima printf. Kalau include-nya dihapus, kamu mendapat implicit declaration of function 'printf'.

Perbedaan kurung sudut dan tanda kutip menyangkut tempat compiler mencari: <...> berarti direktori include sistem, "..." berarti cari dulu di sebelah file ini.

Fungsi main

int main(void) {
    return 0;
}

Ada empat bagian, masing-masing punya arti:

  • int: tipe kembalian main. Nilainya dikirim ke sistem operasi sebagai status keluar, di mana 0 berarti sukses.
  • main: nama khusus yang dipanggil runtime. Setiap program C hosted punya tepat satu.
  • (void): daftar parameter. void di sini berarti "tidak menerima argumen". Menulis main() juga sah, tetapi lebih lemah: kurung kosong di C berarti "parameter tidak ditentukan", yang mematikan pemeriksaan argumen.
  • { ... }: body fungsi.

Bentuk standar lainnya menerima argumen command line:

int main(int argc, char *argv[]) { ... }

Gunakan int main(void) sampai kamu membutuhkannya.

Pernyataan dan Titik Koma

Pernyataan adalah satu instruksi, dan diakhiri titik koma.

Empat pernyataan, empat titik koma. Titik koma adalah penutup, bukan pemisah: pernyataan terakhir di sebuah blok juga membutuhkannya.

Yang tidak memakai titik koma:

#include <stdio.h>        /* preprocessor line - no semicolon */

int add(int a, int b) {   /* function definition header - no semicolon */
    return a + b;
}                         /* closing brace of a function - no semicolon */

if (x > 0) {
    ...
}                         /* closing brace of a control block - no semicolon */

Satu kasus yang menjebak semua orang adalah titik koma di tempat seharusnya ada body:

if (score > 90);              /* BUG: this ; is the entire if body */
    printf("Excellent!\n");   /* always runs, whatever score is */

Itu C yang sepenuhnya sah. if mengendalikan pernyataan kosong, dan printf hanyalah baris berikutnya dalam urutan. -Wall memberi peringatan; compiler tidak akan menghentikanmu.

Blok dan Kurung Kurawal

Kurung kurawal mengelompokkan pernyataan menjadi sebuah blok, yang dihitung sebagai satu pernyataan di mana pun pernyataan diharapkan.

Kurung kurawal boleh tidak ditulis kalau body-nya hanya satu pernyataan, tetapi menghilangkannya adalah awal dari bug-bug terkenal: tambahkan baris kedua belakangan, dan baris itu diam-diam berada di luar if. Selalu gunakan kurung kurawal.

Blok juga membuat scope: variabel yang dideklarasikan di dalam { ... } berhenti ada di kurung kurawal penutup.

Case Sensitive dan Whitespace

C bersifat case sensitive di mana saja. total, Total, dan TOTAL adalah tiga nama yang terpisah. Semua kata kunci ditulis dengan huruf kecil, jadi Int, Return, dan Printf semuanya error. Pesan error untuk Printf membingungkan, karena compiler mengira kamu bermaksud memanggil fungsi yang belum pernah ia kenal.

Sebaliknya, whitespace hampir sepenuhnya bebas. Compiler menganggap deretan spasi, tab, dan baris baru apa pun sebagai satu pemisah. Ini valid:

int    main ( void )
{
    printf
    ( "Hello\n" ) ;
    return 0 ;
}

Begitu juga ini:

int main(void){printf("Hello\n");return 0;}

Keduanya dikompilasi dengan hasil yang sama. Karena compiler tidak peduli, format kode sepenuhnya untuk manusia. Tata letak yang lazim (satu pernyataan per baris, empat spasi atau satu tab per tingkat nesting, kurung kurawal pembuka di baris yang sama) layak diikuti karena setiap codebase C yang kamu baca akan memakai sesuatu yang mirip.

Ada dua tempat di mana whitespace memang berpengaruh: kamu tidak bisa memecah kata kunci atau identifier (in t bukan int), dan kamu tidak bisa menaruh baris baru di dalam string literal biasa.

Identifier: Aturan Penamaan

Identifier adalah nama apa pun yang kamu pilih: variabel, fungsi, tipe. Aturannya:

  • Terdiri dari huruf, angka, dan garis bawah.
  • Tidak boleh diawali angka. total2 boleh, 2total tidak.
  • Tidak boleh berupa kata kunci: tidak ada variabel bernama int, for, atau return.
  • Huruf besar dan kecil dibedakan.
  • Nama yang diawali garis bawah, dan apa pun yang berisi dua garis bawah berturut-turut, dicadangkan untuk implementasi. Jangan membuatnya sendiri.
int score;        /* good */
int total_items;  /* good - snake_case is the C convention */
int _hidden;      /* legal but reserved - avoid */
int 2fast;        /* error */
int float;        /* error - keyword */

Program Lengkap dengan Anotasi

Semua yang di atas, dalam satu tempat:

Urutan membaca penting di sini: with_tax didefinisikan sebelum dipakai oleh main. C membaca file dari atas ke bawah, jadi sebuah fungsi harus dideklarasikan sebelum dipanggil. Definisikan lebih awal, atau tulis prototipe fungsi di bagian atas lalu definisikan belakangan.

Pertanyaan yang sering diajukan

Bagaimana struktur dasar program C?

Pertama direktif preprocessor (#include <stdio.h>), lalu definisi fungsi, salah satunya harus main. Di dalam fungsi, pernyataan diakhiri titik koma dan blok dibungkus kurung kurawal. Program paling kecil adalah #include <stdio.h> ditambah int main(void) { return 0; }.

Kenapa ditulis int main(void), bukan main() saja?

int adalah tipe kembalian main, yaitu status keluar yang diserahkan program ke sistem operasi. (void) menyatakan secara eksplisit bahwa main tidak menerima argumen. Menulis main() dengan kurung kosong adalah gaya lama yang tidak memberi tahu compiler apa pun tentang parameternya, sehingga pemeriksaannya lebih sedikit.

Apakah semua pernyataan C butuh titik koma?

Setiap pernyataan butuh, tetapi tidak setiap baris. Direktif preprocessor (#include, #define), definisi fungsi, dan kurung kurawal penutup sebuah blok atau if/for/while tidak memakainya. Titik koma nyasar setelah if (x) adalah C yang sah dan diam-diam membuat body-nya selalu dijalankan tanpa syarat.

Apakah C case sensitive?

Ya, sepenuhnya. count, Count, dan COUNT adalah tiga identifier yang berbeda, dan Int bukan kata kunci int. Semua kata kunci C ditulis dengan huruf kecil, jadi huruf kapital di Return atau Printf menghasilkan error.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai