Setiap nama yang kita ciptakan di dalam program C — variabel, fungsi, tipe buatan sendiri, macro — disebut identifier. Bahasa C memiliki aturan ketat tentang karakter apa saja yang boleh dipakai untuk menyusun identifier, serta daftar kata cadangan (keyword) yang tidak boleh kita pakai sebagai nama karena sudah dipakai oleh bahasa itu sendiri. Pada Chapter ini kita akan mempelajari aturan penamaan identifier, daftar keyword C, serta beberapa konvensi penamaan yang banyak dipakai komunitas.

Aturan Penamaan Identifier #

Sebuah identifier di C harus memenuhi aturan berikut:

  1. Karakter pertama wajib berupa huruf (a-z, A-Z) atau garis bawah (_).
  2. Karakter berikutnya boleh berupa huruf, garis bawah, atau angka (0-9).
  3. Tidak boleh sama persis dengan salah satu keyword C.
  4. Bersifat case-sensitive — umur, Umur, dan UMUR adalah tiga identifier yang berbeda.
c
#include <stdio.h>

int main(void) {
    int umur = 25;
    int _jumlah = 3;
    int total2024 = 100;
    double tinggi_cm = 170.5;

    printf("umur = %d\n", umur);
    printf("_jumlah = %d\n", _jumlah);
    printf("total2024 = %d\n", total2024);
    printf("tinggi_cm = %.1f\n", tinggi_cm);
    return 0;
}

Output yang Dihasilkan:

text
umur = 25
_jumlah = 3
total2024 = 100
tinggi_cm = 170.5

Mari kita telaah baris-baris kode di atas:

  1. Baris 4 (int umur = 25;): identifier umur dimulai dengan huruf kecil, diikuti huruf kecil lain — bentuk paling lazim untuk nama variabel lokal.
  2. Baris 5 (int _jumlah = 3;): identifier _jumlah diawali garis bawah. Penamaan ini valid tetapi umumnya kita menghindari garis bawah di awal karena komunitas C memakainya untuk identifier internal pustaka standar atau compiler.
  3. Baris 6 (int total2024 = 100;): angka 2024 boleh muncul selama tidak di posisi pertama. 2024total akan ditolak compiler.
  4. Baris 7 (double tinggi_cm = 170.5;): snake_case — kata dipisah garis bawah — adalah konvensi penamaan variabel yang paling banyak dipakai di ekosistem C.

Identifier sebagai Nama Fungsi #

Identifier tidak hanya untuk variabel; nama fungsi juga termasuk identifier dan mengikuti aturan yang sama. Pemilihan nama fungsi yang ringkas dan deskriptif membantu pembaca kode memahami tujuan fungsi tanpa harus membaca implementasinya.

c
#include <stdio.h>

int hitung_diskon(int harga, int persen) {
    return harga * persen / 100;
}

int main(void) {
    int harga = 200000;
    int diskon = 10;
    int bayar = harga - hitung_diskon(harga, diskon);
    printf("Harga awal : %d\n", harga);
    printf("Diskon     : %d%%\n", diskon);
    printf("Bayar      : %d\n", bayar);
    return 0;
}

Output yang Dihasilkan:

text
Harga awal : 200000
Diskon     : 10%
Bayar      : 180000

Pada contoh di atas, identifier hitung_diskon memenuhi semua aturan: diawali huruf, terdiri dari huruf kecil dan garis bawah, tidak sama dengan keyword. Nama hitung_diskon sekaligus mengomunikasikan bahwa fungsi tersebut menghitung besaran diskon — tujuannya jelas dari namanya saja.

Case Sensitivity Identifier #

C memperlakukan huruf kecil dan huruf besar sebagai karakter yang berbeda. Akibatnya, Nama, nama, dan NAMA adalah tiga identifier yang merujuk ke tiga variabel berbeda — compiler tidak menganggap ada konflik.

c
#include <stdio.h>

int main(void) {
    int Nama = 5;
    int nama = 10;
    int NAMA = 15;
    printf("Nama = %d\n", Nama);
    printf("nama = %d\n", nama);
    printf("NAMA = %d\n", NAMA);
    return 0;
}

Output yang Dihasilkan:

text
Nama = 5
nama = 10
NAMA = 15

Pada contoh di atas, compiler menerima ketiga deklarasi karena ketiganya dianggap nama yang berbeda. Meskipun valid, memakai tiga variasi huruf besar-kecil untuk konsep yang sama adalah praktik buruk — pembaca kode mudah tertukar antara Nama dan nama. Sebaiknya kita memilih satu konvensi dan menerapkannya secara konsisten.

Daftar Keyword C #

Bahasa C menyimpan sejumlah kata sebagai keyword — kata-kata yang sudah memiliki arti khusus dan tidak boleh dipakai sebagai identifier. Berikut adalah daftar keyword pada C11 (44 kata) yang menjadi patokan paling banyak dipakai saat ini, dirujuk dari cppreference.com:

text
auto        break       case        char        const       continue
default     do          double      else        enum        extern
float       for         goto        if          inline      int
long        register    restrict    return      short       signed
sizeof      static      struct      switch      typedef     union
unsigned    void        volatile    while       _Alignas    _Alignof
_Atomic     _Bool       _Complex    _Generic    _Imaginary  _Noreturn
_Static_assert          _Thread_local

Pada standar C23, daftar keyword bertambah dengan bool, true, false, nullptr, constexpr, thread_local, dan beberapa kata lain yang sebelumnya berupa macro di header. Daftar lengkap C23 dapat dilihat pada cppreference.com bagian C keywords.

Mencoba memakai keyword sebagai nama variabel akan ditolak compiler. Sebagai contoh, kode berikut tidak akan dapat dikompilasi:

c
#include <stdio.h>

int main(void) {
    int int = 5;        /* ERROR: 'int' adalah keyword */
    int return = 10;     /* ERROR: 'return' adalah keyword */
    printf("%d\n", int);
    return 0;
}

Compiler GCC akan mengeluarkan pesan galat seperti error: expected identifier or '(' before 'int'. Untuk memperbaiki, ganti int dan return dengan identifier lain seperti jumlah atau total.

Konvensi Penamaan di Komunitas C #

Beberapa konvensi penamaan yang banyak dipakai di komunitas C:

  • Variabel dan fungsi: snake_case — contoh hitung_diskon, total_harga.
  • Konstanta macro: UPPER_SNAKE_CASE — contoh MAX_SIZE, PI.
  • Tipe buatan sendiri (struct, enum, typedef): biasanya snake_case atau PascalCase, tergantung proyek — contoh struct point, typedef enum color.
  • Nama file: lowercase dengan akhiran .c atau .h — contoh geometri.c, geometri.h.

Konvensi bukan aturan bahasa; compiler menerima nama apa pun yang memenuhi aturan identifier. Tetapi mengikuti konvensi membuat kode kita terbaca akrab bagi pengembang C lain, dan mempermudah kerja tim dalam proyek jangka panjang.