Saat membaca dokumentasi C, kita akan menemui banyak istilah teknis yang berasal dari standar ISO maupun praktik compiler. Bab ini menyusun glosarium istilah yang paling sering kita temui—dari konsep dasar seperti array dan pointer hingga konsep lanjutan seperti ABI, alignment, dan linkage. Setiap entri disertai definisi singkat dan contoh kode atau rujukan ke bab terkait.
Daftar Istilah A-Z #
| Istilah | Definisi |
|---|---|
| ABI (Application Binary Interface) | Spesifikasi level biner antara modul: calling convention, layout struct, ukuran tipe, name mangling. ABI berbeda per OS+arch. |
| Aggregate type | Tipe yang mengelompokkan beberapa value: struct, union, array. |
| Alignment | Persyaratan alamat memori suatu objek harus kelipatan N byte. int biasanya aligned ke 4 byte. |
| Argument | Nilai yang dilewatkan ke fungsi saat pemanggilan. Berbeda dengan parameter yang merupakan deklarasi penerima. |
| Array | Blok memori kontigu berisi elemen bertipe sama. |
| Aspect of behavior | Kategori perilaku program: well-defined, implementation-defined, unspecified, undefined. |
| Atomic | Operasi tidak dapat dipotong—tampak sebagai satu langkah tak terbagi. Didukung <stdatomic.h> sejak C11. |
| Automatic storage duration | Variabel lokal fungsi dibuat saat blok dimasuki, dihancurkan saat blok keluar. Default untuk variabel lokal. |
| Bit-field | Field struct dengan lebar bit spesifik. Contoh: unsigned flag : 1; |
| Block | Bagian kode diapit { dan }. |
| Byte | Unit memori terkecil yang dapat dialamatkan. Di C, ukuran char = 1 byte. |
| Calling convention | Aturan bagaimana argumen dilewatkan, register dipakai, stack dibersihkan. Bagian dari ABI. |
| Cast | Konversi eksplisit tipe: (int)x. |
| Character constant | Literal karakter: 'A', '\n'. |
| Compound literal | Konstruksi objek anonim inline: (struct Point){1, 2}. C99+. |
| Const correctness | Praktik menandai parameter, variabel, dan return value const untuk mencegah modifikasi tak sengaja. |
| Constant expression | Ekspresi yang dievaluasi saat compile: 2 + 3, sizeof(int). |
| CRLF | Carriage Return + Line Feed: \r\n. End-of-line Windows. |
| Declaration | Pernyataan tentang nama dan tipe, tanpa alokasi memori: extern int x; |
| Declaration specifier | Bagian deklarasi: storage class, type qualifier, type specifier. |
| Definition | Pernyataan yang mengalokasikan/menyimpan nilai: int x = 10; |
| Designated initializer | Inisialisasi dengan label field: struct Point p = {.x = 1, .y = 2}; C99+. |
| Dialect | Variasi bahasa: K&R, C89, C99, GNU C. |
| Endianness | Urutan byte dalam representasi multi-byte: big-endian (MSB first) atau little-endian (LSB first). |
| Enum | Tipe dengan konstanta integer bernama. |
| Evaluation | Proses menghitung nilai ekspresi. |
| Execution character set | Set karakter yang dipakai saat runtime. |
| Expression | Urutan operator dan operand yang menghasilkan nilai. |
| External linkage | Nama terlihat dari file lain (default untuk fungsi dan variabel global non-static). |
| File scope | Variabel/fungsi dideklarasikan di luar fungsi, terlihat di seluruh file. |
| Floating point | Representasi bilangan real sesuai IEEE-754: float, double, long double. |
| Forward declaration | Deklarasi sebelum definisi: struct Point; memungkinkan pointer ke struct yang belum didefinisikan penuh. |
| Freestanding | Lingkungan tanpa library standar penuh (kernel, firmware). main tidak wajib. |
| Function prototype | Deklarasi signature fungsi: int tambah(int, int); |
| Generic selection | _Generic untuk memilih ekspresi berdasarkan tipe. C11+. |
| Header guard | #ifndef/#define/#endif mencegah include ganda. |
| Header file | File .h berisi deklarasi yang dibagikan antar file .c. |
| Hosted | Lingkungan dengan library standar penuh dan main. |
| Implementation-defined behavior | Perilaku yang tidak dispesifikasikan standar, tetapi didokumentasikan compiler. |
| Implicit conversion | Konversi tipe otomatis oleh compiler: int + double → double + double. |
| Include guard | Sama dengan header guard. |
| Incomplete type | Tipe yang diketahui nama tetapi tidak ukuran: struct Foo; sebelum definisi penuh. |
| Inline function | Fungsi yang disarankan untuk di-expand di call site. C99+ keyword inline. |
| Integer promotion | Konversi char/short ke int sebelum operasi aritmetika. |
| Internal linkage | Nama hanya terlihat di file yang sama (static). |
| Lvalue | Ekspresi yang merujuk ke objek memori, dapat diambil alamatnya: x, arr[0]. |
| Linkage | Visibilitas nama antar translation unit: external, internal, none. |
| Literal | Notasi nilai dalam source: 42, 3.14, "halo", 'A'. |
| Macro | Pengidentifikasi yang diperluas preprocessor: #define MAX(a,b) ((a)>(b)?(a):(b)). |
| Member | Field dalam struct atau union. |
| Modifiable lvalue | Lvalue yang dapat diassign: variabel non-const, array element, struct field non-const. |
| Narrowing conversion | Konversi yang dapat kehilangan nilai: int → short, double → int. |
| Negative zero | Nilai -0.0 di floating point. Berbeda dari +0.0 di bitwise tetapi == true. |
| Null pointer | Pointer yang tidak menunjuk ke objek manapun: NULL atau nullptr (C23). |
| Object | Region memori yang dapat diakses program. |
| Object file | Output compiler: .o (Linux) atau .obj (Windows), input untuk linker. |
| Octal literal | Literal dimulai 0: 010 = 8 desimal. |
| Operand | Nilai yang dioperasikan oleh operator. |
| Operator precedence | Aturan urutan evaluasi operator dalam ekspresi. |
| Parameter | Variabel penerima di deklarasi fungsi: int f(int x)—x adalah parameter. |
| Pointer | Variabel yang menyimpan alamat memori. |
| Pointer arithmetic | Operasi +, - pada pointer berdasarkan ukuran tipe yang ditunjuk. |
| Preprocessor | Tahap awal compiler yang menangani #include, #define, #if. |
| Promotion | Konversi otomatis tipe sempit ke tipe lebar: char → int. |
| Prototype | Sama dengan function prototype. |
| Qualifier | const, volatile, restrict, _Atomic. |
| Race condition | Dua thread mengakses variabel yang sama, minimal satu menulis, tanpa sinkronisasi. UB. |
| rvalue | Ekspresi yang menghasilkan nilai tetapi tidak dapat diassign: 42, x + 1. |
| Reference | (C++) Alias. C tidak punya reference—hanya pointer. |
| Restrict | Qualifier pointer yang menjanjikan tidak ada alias lain ke objek yang ditunjuk. |
| Round-trip | Konversi yang dapat dibalik tanpa kehilangan: int → long → int. |
| Sequence point | Titik di mana semua side effect sebelumnya selesai. Koma, &&, ` |
| Side effect | Modifikasi state: assignment, ++, I/O. |
| Signed | Tipe integer yang dapat negatif: int, signed char. |
| Static storage duration | Variabel hidup sepanjang program: variabel static, global. |
| Storage class | auto, register, static, extern, _Thread_local. |
| Strict aliasing | Aturan compiler dapat mengasumsikan dua pointer tipe berbeda tidak menunjuk objek yang sama. |
| String literal | Sekuens karakter dalam tanda kutip ganda: "halo". Tipe char[], read-only. |
| Struct | Aggregate type yang mengelompokkan field dengan tipe berbeda. |
| Translation unit | File .c setelah preprocessor plus semua header yang di-include. |
| Trigraph | Sekuens ??X yang diterjemahkan ke karakter lain. Dihapus di C23. |
| Type qualifier | const, volatile, restrict, _Atomic. |
| Undefined behavior (UB) | Perilaku tidak terdefinisi standar; compiler bebas melakukan apa saja. |
| Unified type | Tipe yang setelah conversion compatible. |
| Union | Aggregate type yang anggotanya berbagi memori yang sama. |
| Unsigned | Tipe integer yang tidak negatif: unsigned int. |
| Unspecified behavior | Standar memberi beberapa pilihan, compiler bebas memilih. |
| Value category | Klasifikasi ekspresi: lvalue, rvalue (C tidak punya xvalue, prvalue, dll.). |
| Variable-length array (VLA) | Array dengan ukuran runtime: int arr[n];. C99 mandatory, C11 optional. |
| Variadic function | Fungsi dengan jumlah argumen variabel: printf, open. Pakai <stdarg.h>. |
| Volatile | Qualifier yang melarang compiler mengoptimasi akses: variabel dapat berubah di luar kontrol. |
| Wide character | wchar_t untuk karakter non-ASCII. |
| Zero initialization | Inisialisasi ke 0: int x = 0;, static int y; (otomatis zero). |
Pengelompokan Konsep #
Beberapa konsep sering dikelompokkan—memahami kategori membantu kita mengingat:
Tiga Aspek Perilaku #
| Aspek | Definisi | Contoh |
|---|---|---|
| Well-defined | Perilaku dijamin standar | 5 + 3 = 8 |
| Implementation-defined | Compiler bebas memilih, didokumentasikan | sizeof(int) |
| Unspecified | Compiler bebas memilih, tidak wajib didokumentasikan | Urutan evaluasi argumen |
| Undefined | Tidak ada jaminan apa pun | Signed overflow |
Empat Storage Class #
| Storage class | Lifetime | Linkage |
|---|---|---|
auto (default) | Block scope, automatic | None |
register (saran compiler) | Block scope, automatic | None |
static | Whole program | Internal (file scope) atau none (block scope) |
extern | Whole program | External |
_Thread_local | Per-thread | External atau internal |
Empat Type Qualifier #
| Qualifier | Efek |
|---|---|
const | Tidak dapat dimodifikasi setelah inisialisasi |
volatile | Akses tidak boleh dioptimasi (bisa berubah dari luar) |
restrict | Pointer tidak alias dengan pointer lain ke objek yang sama |
_Atomic | Operasi atomic, aman untuk multi-thread |
Program Demo: Menampilkan Tipe dan Sifat #
Program berikut mendemonstrasikan beberapa konsep dari glosarium: alignment, sizeof, signed/unsigned, dan storage duration.
c
/* File: glos1.c - Demo beberapa konsep glosarium */
#include <stdio.h>
#include <stdalign.h>
#include <stddef.h>
static int hitung_panggilan = 0; /* static storage: hidup sepanjang program */
static int panggil(void) {
hitung_panggilan++; /* side effect: modifikasi state */
return hitung_panggilan;
}
int main(void) {
/* Alignment */
printf("alignof(int) = %zu\n", alignof(int));
printf("alignof(double) = %zu\n", alignof(double));
printf("alignof(char) = %zu\n", alignof(char));
/* Storage duration: static vs automatic */
printf("panggil ke-1 = %d\n", panggil());
printf("panggil ke-2 = %d\n", panggil());
printf("panggil ke-3 = %d\n", panggil());
/* Lvalue vs rvalue */
int x = 10; /* x adalah lvalue */
int y = x + 5; /* (x + 5) adalah rvalue */
printf("x = %d, y = %d\n", x, y);
/* Compound literal (C99+) */
int *arr = (int[]){1, 2, 3, 4, 5};
printf("arr[2] = %d\n", arr[2]);
/* Designated initializer */
struct Point { int x, y; };
struct Point p = {.x = 10, .y = 20};
printf("point: (%d, %d)\n", p.x, p.y);
return 0;
}Compile dan jalankan:
bash
gcc -std=c11 -Wall -Wextra -o glos1 glos1.c
./glos1Output yang Dihasilkan:
text
alignof(int) = 4
alignof(double) = 8
alignof(char) = 1
panggil ke-1 = 1
panggil ke-2 = 2
panggil ke-3 = 3
x = 10, y = 15
arr[2] = 3
point: (10, 20)Mari kita telaah baris-baris kode di atas:
- Baris 5 (
static int hitung_panggilan = 0): Variabelstaticdi file scope memiliki static storage duration—hidup sepanjang program dan nilainya dipertahankan antar pemanggilan fungsi. Inisialisasi hanya terjadi sekali. - Baris 13-14 (
alignof(int)): Operator_Alignof(aliasalignofdari<stdalign.h>) mengembalikan persyaratan alignment tipe.intumumnya aligned 4 byte,double8 byte,char1 byte. - Baris 20-21 (
panggil()tiga kali): Setiap pemanggilan menginkrementhitung_panggilan(side effect). Karenastatic, nilai tidak reset antar pemanggilan—berbeda dari variabelautoyang dibuat ulang setiap blok. - Baris 25 (
int *arr = (int[]){1, 2, 3, 4, 5}): Compound literal membuat array anonim in-place dan mengembalikan pointer ke array tersebut. Berguna untuk mengoper data ke fungsi tanpa membuat variabel sementara. - Baris 30 (
struct Point p = {.x = 10, .y = 20}): Designated initializer menginisialisasi field berdasarkan nama, bukan urutan. Lebih aman karena tidak tergantung urutan deklarasi struct.