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 #

IstilahDefinisi
ABI (Application Binary Interface)Spesifikasi level biner antara modul: calling convention, layout struct, ukuran tipe, name mangling. ABI berbeda per OS+arch.
Aggregate typeTipe yang mengelompokkan beberapa value: struct, union, array.
AlignmentPersyaratan alamat memori suatu objek harus kelipatan N byte. int biasanya aligned ke 4 byte.
ArgumentNilai yang dilewatkan ke fungsi saat pemanggilan. Berbeda dengan parameter yang merupakan deklarasi penerima.
ArrayBlok memori kontigu berisi elemen bertipe sama.
Aspect of behaviorKategori perilaku program: well-defined, implementation-defined, unspecified, undefined.
AtomicOperasi tidak dapat dipotong—tampak sebagai satu langkah tak terbagi. Didukung <stdatomic.h> sejak C11.
Automatic storage durationVariabel lokal fungsi dibuat saat blok dimasuki, dihancurkan saat blok keluar. Default untuk variabel lokal.
Bit-fieldField struct dengan lebar bit spesifik. Contoh: unsigned flag : 1;
BlockBagian kode diapit { dan }.
ByteUnit memori terkecil yang dapat dialamatkan. Di C, ukuran char = 1 byte.
Calling conventionAturan bagaimana argumen dilewatkan, register dipakai, stack dibersihkan. Bagian dari ABI.
CastKonversi eksplisit tipe: (int)x.
Character constantLiteral karakter: 'A', '\n'.
Compound literalKonstruksi objek anonim inline: (struct Point){1, 2}. C99+.
Const correctnessPraktik menandai parameter, variabel, dan return value const untuk mencegah modifikasi tak sengaja.
Constant expressionEkspresi yang dievaluasi saat compile: 2 + 3, sizeof(int).
CRLFCarriage Return + Line Feed: \r\n. End-of-line Windows.
DeclarationPernyataan tentang nama dan tipe, tanpa alokasi memori: extern int x;
Declaration specifierBagian deklarasi: storage class, type qualifier, type specifier.
DefinitionPernyataan yang mengalokasikan/menyimpan nilai: int x = 10;
Designated initializerInisialisasi dengan label field: struct Point p = {.x = 1, .y = 2}; C99+.
DialectVariasi bahasa: K&R, C89, C99, GNU C.
EndiannessUrutan byte dalam representasi multi-byte: big-endian (MSB first) atau little-endian (LSB first).
EnumTipe dengan konstanta integer bernama.
EvaluationProses menghitung nilai ekspresi.
Execution character setSet karakter yang dipakai saat runtime.
ExpressionUrutan operator dan operand yang menghasilkan nilai.
External linkageNama terlihat dari file lain (default untuk fungsi dan variabel global non-static).
File scopeVariabel/fungsi dideklarasikan di luar fungsi, terlihat di seluruh file.
Floating pointRepresentasi bilangan real sesuai IEEE-754: float, double, long double.
Forward declarationDeklarasi sebelum definisi: struct Point; memungkinkan pointer ke struct yang belum didefinisikan penuh.
FreestandingLingkungan tanpa library standar penuh (kernel, firmware). main tidak wajib.
Function prototypeDeklarasi signature fungsi: int tambah(int, int);
Generic selection_Generic untuk memilih ekspresi berdasarkan tipe. C11+.
Header guard#ifndef/#define/#endif mencegah include ganda.
Header fileFile .h berisi deklarasi yang dibagikan antar file .c.
HostedLingkungan dengan library standar penuh dan main.
Implementation-defined behaviorPerilaku yang tidak dispesifikasikan standar, tetapi didokumentasikan compiler.
Implicit conversionKonversi tipe otomatis oleh compiler: int + double → double + double.
Include guardSama dengan header guard.
Incomplete typeTipe yang diketahui nama tetapi tidak ukuran: struct Foo; sebelum definisi penuh.
Inline functionFungsi yang disarankan untuk di-expand di call site. C99+ keyword inline.
Integer promotionKonversi char/short ke int sebelum operasi aritmetika.
Internal linkageNama hanya terlihat di file yang sama (static).
LvalueEkspresi yang merujuk ke objek memori, dapat diambil alamatnya: x, arr[0].
LinkageVisibilitas nama antar translation unit: external, internal, none.
LiteralNotasi nilai dalam source: 42, 3.14, "halo", 'A'.
MacroPengidentifikasi yang diperluas preprocessor: #define MAX(a,b) ((a)>(b)?(a):(b)).
MemberField dalam struct atau union.
Modifiable lvalueLvalue yang dapat diassign: variabel non-const, array element, struct field non-const.
Narrowing conversionKonversi yang dapat kehilangan nilai: int → short, double → int.
Negative zeroNilai -0.0 di floating point. Berbeda dari +0.0 di bitwise tetapi == true.
Null pointerPointer yang tidak menunjuk ke objek manapun: NULL atau nullptr (C23).
ObjectRegion memori yang dapat diakses program.
Object fileOutput compiler: .o (Linux) atau .obj (Windows), input untuk linker.
Octal literalLiteral dimulai 0: 010 = 8 desimal.
OperandNilai yang dioperasikan oleh operator.
Operator precedenceAturan urutan evaluasi operator dalam ekspresi.
ParameterVariabel penerima di deklarasi fungsi: int f(int x)—x adalah parameter.
PointerVariabel yang menyimpan alamat memori.
Pointer arithmeticOperasi +, - pada pointer berdasarkan ukuran tipe yang ditunjuk.
PreprocessorTahap awal compiler yang menangani #include, #define, #if.
PromotionKonversi otomatis tipe sempit ke tipe lebar: char → int.
PrototypeSama dengan function prototype.
Qualifierconst, volatile, restrict, _Atomic.
Race conditionDua thread mengakses variabel yang sama, minimal satu menulis, tanpa sinkronisasi. UB.
rvalueEkspresi yang menghasilkan nilai tetapi tidak dapat diassign: 42, x + 1.
Reference(C++) Alias. C tidak punya reference—hanya pointer.
RestrictQualifier pointer yang menjanjikan tidak ada alias lain ke objek yang ditunjuk.
Round-tripKonversi yang dapat dibalik tanpa kehilangan: int → long → int.
Sequence pointTitik di mana semua side effect sebelumnya selesai. Koma, &&, `
Side effectModifikasi state: assignment, ++, I/O.
SignedTipe integer yang dapat negatif: int, signed char.
Static storage durationVariabel hidup sepanjang program: variabel static, global.
Storage classauto, register, static, extern, _Thread_local.
Strict aliasingAturan compiler dapat mengasumsikan dua pointer tipe berbeda tidak menunjuk objek yang sama.
String literalSekuens karakter dalam tanda kutip ganda: "halo". Tipe char[], read-only.
StructAggregate type yang mengelompokkan field dengan tipe berbeda.
Translation unitFile .c setelah preprocessor plus semua header yang di-include.
TrigraphSekuens ??X yang diterjemahkan ke karakter lain. Dihapus di C23.
Type qualifierconst, volatile, restrict, _Atomic.
Undefined behavior (UB)Perilaku tidak terdefinisi standar; compiler bebas melakukan apa saja.
Unified typeTipe yang setelah conversion compatible.
UnionAggregate type yang anggotanya berbagi memori yang sama.
UnsignedTipe integer yang tidak negatif: unsigned int.
Unspecified behaviorStandar memberi beberapa pilihan, compiler bebas memilih.
Value categoryKlasifikasi 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 functionFungsi dengan jumlah argumen variabel: printf, open. Pakai <stdarg.h>.
VolatileQualifier yang melarang compiler mengoptimasi akses: variabel dapat berubah di luar kontrol.
Wide characterwchar_t untuk karakter non-ASCII.
Zero initializationInisialisasi ke 0: int x = 0;, static int y; (otomatis zero).

Pengelompokan Konsep #

Beberapa konsep sering dikelompokkan—memahami kategori membantu kita mengingat:

Tiga Aspek Perilaku #

AspekDefinisiContoh
Well-definedPerilaku dijamin standar5 + 3 = 8
Implementation-definedCompiler bebas memilih, didokumentasikansizeof(int)
UnspecifiedCompiler bebas memilih, tidak wajib didokumentasikanUrutan evaluasi argumen
UndefinedTidak ada jaminan apa punSigned overflow

Empat Storage Class #

Storage classLifetimeLinkage
auto (default)Block scope, automaticNone
register (saran compiler)Block scope, automaticNone
staticWhole programInternal (file scope) atau none (block scope)
externWhole programExternal
_Thread_localPer-threadExternal atau internal

Empat Type Qualifier #

QualifierEfek
constTidak dapat dimodifikasi setelah inisialisasi
volatileAkses tidak boleh dioptimasi (bisa berubah dari luar)
restrictPointer tidak alias dengan pointer lain ke objek yang sama
_AtomicOperasi 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
./glos1

Output 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:

  1. Baris 5 (static int hitung_panggilan = 0): Variabel static di file scope memiliki static storage duration—hidup sepanjang program dan nilainya dipertahankan antar pemanggilan fungsi. Inisialisasi hanya terjadi sekali.
  2. Baris 13-14 (alignof(int)): Operator _Alignof (alias alignof dari <stdalign.h>) mengembalikan persyaratan alignment tipe. int umumnya aligned 4 byte, double 8 byte, char 1 byte.
  3. Baris 20-21 (panggil() tiga kali): Setiap pemanggilan menginkrement hitung_panggilan (side effect). Karena static, nilai tidak reset antar pemanggilan—berbeda dari variabel auto yang dibuat ulang setiap blok.
  4. 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.
  5. 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.