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:
- Karakter pertama wajib berupa huruf (
a-z,A-Z) atau garis bawah (_). - Karakter berikutnya boleh berupa huruf, garis bawah, atau angka (
0-9). - Tidak boleh sama persis dengan salah satu keyword C.
- Bersifat case-sensitive —
umur,Umur, danUMURadalah tiga identifier yang berbeda.
#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:
umur = 25
_jumlah = 3
total2024 = 100
tinggi_cm = 170.5Mari kita telaah baris-baris kode di atas:
- Baris 4 (
int umur = 25;): identifierumurdimulai dengan huruf kecil, diikuti huruf kecil lain — bentuk paling lazim untuk nama variabel lokal. - Baris 5 (
int _jumlah = 3;): identifier_jumlahdiawali garis bawah. Penamaan ini valid tetapi umumnya kita menghindari garis bawah di awal karena komunitas C memakainya untuk identifier internal pustaka standar atau compiler. - Baris 6 (
int total2024 = 100;): angka2024boleh muncul selama tidak di posisi pertama.2024totalakan ditolak compiler. - 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.
#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:
Harga awal : 200000
Diskon : 10%
Bayar : 180000Pada 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.
#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:
Nama = 5
nama = 10
NAMA = 15Pada 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:
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_localPada 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:
#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— contohhitung_diskon,total_harga. - Konstanta macro:
UPPER_SNAKE_CASE— contohMAX_SIZE,PI. - Tipe buatan sendiri (
struct,enum,typedef): biasanyasnake_caseatauPascalCase, tergantung proyek — contohstruct point,typedef enum color. - Nama file:
lowercasedengan akhiran.catau.h— contohgeometri.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.