Dokumentasi C
Referensi C yang ringkas dan penuh contoh. Baca konsepnya, lihat kodenya, lalu praktikkan di perjalanan Coddy.
Mulai kursusMemulai
- Apa Itu CC adalah bahasa compiled yang kecil dan cepat dari tahun 1972, dan sampai sekarang masih menjalankan sistem operasi, database, dan hampir setiap perangkat embedded. Berikut apa itu C, di mana C berjalan, dan kenapa C layak dipelajari di 2026.
- Install C (GCC)Pasang compiler C yang berfungsi di sistem apa pun: MinGW-w64 di Windows, clang dari Apple di macOS, dan gcc di Linux. Ditambah cara memastikan instalasinya berhasil dan mengompilasi file pertamamu.
- Compile dan JalankanUbah file .c menjadi program yang berjalan: perintah gcc, apa yang sebenarnya dilakukan preprocessing, kompilasi, dan linking, flag yang layak dipakai sejak hari pertama, dan cara membaca error saat gagal.
- Sintaks CSetiap 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.
- KomentarC punya dua gaya komentar, satu baris // dan banyak baris /* */, dengan sejarah yang berbeda dan satu jebakan saat disarangkan. Berikut cara memakai keduanya, plus apa yang layak diberi komentar dan apa yang tidak.
Variabel & Tipe
- VariabelCara mendeklarasikan variabel di C, perbedaan deklarasi dan inisialisasi, aturan penamaan, mendeklarasikan beberapa variabel sekaligus, dan kenapa variabel yang belum diinisialisasi adalah bug pemula yang paling umum.
- Tipe DataSetiap variabel C punya tipe yang menentukan ukurannya dan apa yang bisa disimpannya. Berikut semua tipe dasar, ukuran sebenarnya, signed vs unsigned, sizeof, limits.h, dan apa yang terjadi saat overflow.
- KonstantaTiga cara memberi nama pada nilai yang tidak pernah berubah di C, yaitu kata kunci const, macro #define, dan konstanta enum: apa sebenarnya masing-masing, dan kapan memakainya.
- OperatorSemua operator C yang perlu kamu tahu: aritmetika, penugasan, perbandingan, logika, dan increment. Ditambah jebakan pembagian integer, perilaku modulo dengan angka negatif, dan tabel prioritas yang bisa kamu andalkan.
- BooleanC tidak punya tipe boolean sampai C99. Nol berarti false, selain itu true, hasil perbandingan bertipe int, dan stdbool.h menambahkan bool, true, dan false di atasnya. Ditambah bug = vs == yang lahir dari desain ini.
- Type CastingC terus-menerus mengonversi nilai antartipe: kadang karena kamu memintanya dengan cast, dan lebih sering atas inisiatifnya sendiri. Berikut aturan promosi, sintaks cast eksplisit, dan konversi yang diam-diam menghilangkan data.
Alur Kontrol
- if / elseCara C mengambil keputusan: pernyataan if, else, rantai else if, if bersarang, dan operator ternary. Ditambah aturan kebenaran (0 berarti salah, selain itu benar) dan bug `=` vs `==` yang diam-diam merusak kondisi.
- switchCara pernyataan switch di C memilih satu cabang dari daftar konstanta: label case, kenapa break itu penting, fall-through yang disengaja dan yang tidak, default, switch pada char dan enum, serta kapan switch lebih baik daripada rantai else-if.
- Loop forCara mengulang kode dengan for loop di C: header tiga bagian, menghitung naik dan turun, menelusuri array dengan trik sizeof, nested loop, loop tanpa akhir, serta bug off-by-one dan unsigned yang menjebak semua orang.
- while LoopCara while loop di C mengulang sampai sebuah kondisi berubah: aturan kondisi-dicek-dulu, perulangan dengan sentinel, membaca input sampai EOF, while(1), dan mengubah for menjadi while atau sebaliknya.
- Loop do-whileLoop C yang menjalankan body lebih dulu: bagaimana do-while menjamin satu putaran sebelum pengujian, kenapa diakhiri titik koma, pola menu dan percobaan ulang yang menjadi tujuannya, dan bedanya dengan while loop biasa.
- break & continuebreak keluar dari loop atau switch; continue melompat ke putaran berikutnya. Cara keduanya bekerja di for, while, dan do-while, cara keluar dari nested loop dengan flag atau goto, dan penyalahgunaan yang membuat loop sulit diikuti.
Fungsi
- FungsiCara mendefinisikan dan memanggil fungsi di C: tipe kembalian, parameter, nilai kembalian, fungsi void, kenapa memecah program itu penting, dan contoh lengkap yang dibangun dari bagian kecil yang diberi nama.
- Parameter FungsiC mengirim semuanya by value: fungsi menerima salinan, tidak pernah aslinya. Apa artinya dalam praktik, bagaimana pointer meniru pass by reference, kenapa array berperilaku berbeda, dan cara mengembalikan beberapa hasil.
- Prototipe FungsiKenapa C perlu melihat bentuk sebuah fungsi sebelum kamu memanggilnya: menulis prototipe, memperbaiki error implicit declaration, menaruh prototipe di header file, dan perbedaan sebenarnya antara f(void) dan f().
- RekursiBagaimana fungsi C memanggil dirinya sendiri: base case yang menghentikannya, faktorial dan Fibonacci yang dibahas langkah demi langkah, kenapa Fibonacci naif luar biasa lambat, apa sebenarnya stack overflow itu, dan kapan loop adalah jawaban yang lebih baik.
- ScopeDi mana variabel C terlihat dan berapa lama variabel itu hidup: scope blok, parameter fungsi, variabel global di scope file, variabel lokal static yang bertahan di antara pemanggilan, fungsi static, shadowing, dan kenapa variabel global menimbulkan masalah.
Pointer
- PointerPointer adalah variabel yang menyimpan alamat memori. Halaman ini membangun konsepnya dari dasar: operator & dan *, mendeklarasikan dan melakukan dereference pada pointer, kenapa tipe pointer penting, dan fungsi swap() yang menunjukkan kenapa pointer itu ada.
- Aritmetika pointerMenambahkan 1 ke pointer tidak menambah 1 byte: pointer pindah ke objek berikutnya dengan tipe yang sama. Halaman ini membahas ptr+1, increment dan decrement, selisih pointer, perbandingan, menelusuri array dengan pointer, dan aturan satu-melewati-akhir.
- Pointer dan arrayDi C, nama array berubah menjadi pointer ke elemen pertamanya hampir di mana pun kamu memakainya. Halaman ini menjelaskan decay itu, kenapa arr[i] secara harfiah sama dengan *(arr+i), kenapa ukuran array harus dikirim terpisah ke fungsi, dan apa bedanya pointer ke array dengan array berisi pointer.
- Pointer FungsiFungsi juga punya alamat, dan pointer fungsi menyimpannya. Halaman ini mengurai sintaks deklarasinya, menunjukkan bagaimana typedef membuatnya mudah dibaca, lalu membangun sampai callback, qsort dengan comparator buatan sendiri, dan tabel dispatch.
- Pointer NULLNULL adalah alamat yang disimpan pointer saat tidak menunjuk ke apa pun. Halaman ini membahas apa sebenarnya NULL, kenapa dereference NULL membuat program crash, bedanya dengan 0 dan dengan pointer yang belum diinisialisasi, dan pola bertahan yang menjauhkan bug null dari kodemu.
Array & String
- ArrayCara mendeklarasikan dan menginisialisasi array di C, mengakses indeks mulai dari nol, menghitung panjangnya dengan sizeof, menelusuri elemennya dengan perulangan, dan kenapa membaca melewati ujung array adalah undefined behavior, bukan pesan error.
- Array multidimensiCara mendeklarasikan, menginisialisasi, dan melakukan perulangan pada array 2D di C, apa arti tata letak row-major di memori, kenapa mengirim array 2D ke fungsi butuh jumlah kolom, dan contoh matriks yang lengkap.
- StringC tidak punya tipe string: string adalah array char yang diakhiri byte '\0'. Halaman ini membangun gambaran mental itu, lalu membahas literal, mencetak, menelusuri string, dan kenapa kamu tidak bisa menyalin string dengan =.
- Fungsi StringTur praktis <string.h>: mengukur dengan strlen, menyalin dengan strcpy dan strncpy, menggabungkan dengan strcat, membandingkan dengan strcmp, mencari dengan strchr dan strstr, serta cara menentukan ukuran buffer supaya tidak ada yang overflow.
- Konversi StringMengonversi antara teks dan angka di C: kenapa atoi tidak bisa melaporkan error, cara memakai strtol dan strtod dengan benar lewat endptr dan errno, mengubah angka menjadi string dengan snprintf, dan trik satu digit dengan '0'.
Memori Dinamis
- Memori DinamisKenapa heap ada, bagaimana malloc memberimu memori yang ukurannya ditentukan saat program berjalan, pola p = malloc(n * sizeof *p), memeriksa NULL, mem-free tepat sekali, dan array dinamis yang dibahas dari awal sampai akhir.
- calloc dan realloccalloc memberimu memori yang sudah bernilai nol dan mengalikan ukurannya dengan aman; realloc memperbesar blok yang sudah kamu isi. Halaman ini membahas keduanya, pola pointer sementara yang mencegah realloc yang gagal menyebabkan kebocoran, dan kapan calloc lebih baik daripada malloc ditambah memset.
- Memory leakApa sebenarnya memory leak itu, tiga cara program C menghasilkannya, disiplin kepemilikan yang mencegahnya, dan cara menemukan sisanya dengan valgrind dan -fsanitize=address. Ditutup dengan program bocor yang diperbaiki langkah demi langkah.
- Stack vs HeapDi mana datamu sebenarnya tinggal: penyimpanan otomatis di stack, penyimpanan dinamis di heap, dan penyimpanan statis sebagai wilayah ketiga. Lengkap dengan bug dangling pointer klasik akibat mengembalikan variabel lokal, dan aturan untuk memilih.
Struct, Union & Enum
- StructCara mengelompokkan nilai-nilai yang saling berkaitan menjadi satu tipe dengan struct di C: mendeklarasikannya, mengakses anggota dengan operator titik, designated initializer, array struct, struct bersarang, dan aturan salin-saat-dikirim yang mengejutkan semua orang.
- Struct & PointerCara menunjuk ke struct di C: operator panah, kenapa (*p).x butuh tanda kurung, mengirim struct lewat pointer untuk mengubahnya atau menghindari salinan, mengalokasikan struct dengan malloc, dan membuat node linked list.
- typedefCara typedef memberi nama baru pada tipe C yang sudah ada: idiom typedef struct dengan dan tanpa tag, typedef untuk function pointer dan array, serta satu kasus di mana typedef justru merugikan: menyembunyikan pointer.
- UnionCara union di C menyimpan beberapa tipe di byte yang sama: kenapa ukurannya sebesar anggota terbesarnya, kenapa kamu harus membaca anggota yang terakhir kamu tulis, dan bagaimana tagged union (enum ditambah union) membuatnya aman.
- enumCara mendefinisikan enum di C: penomoran otomatis, nilai eksplisit, memakai enum di switch agar compiler menangkap case yang terlewat, mengonversi enum menjadi string, dan konvensi penamaan yang menjaganya tetap mudah dibaca.
Input & Output
- printfCara kerja printf yang sebenarnya di C: model format string, specifier yang kamu pakai sehari-hari, width dan precision untuk output yang rata, mencetak float dengan rapi, nilai kembaliannya, dan kenapa printf(user_input) adalah celah keamanan.
- scanfCara membaca input dengan scanf di C: kenapa & wajib, bagaimana whitespace ditangani, buffer overflow pada %s dan perbaikannya dengan width, memeriksa nilai kembalian, bug baris baru yang tertinggal, dan fgets sebagai alternatif yang tangguh.
- Format SpecifierSemua format specifier C di satu tempat: arti %d, %s, %c, %f, %p, dan lainnya, length modifier l, ll, h, dan z, lebar, presisi, dan flag, serta mana yang berbeda antara printf dan scanf.
- File HandlingCara membaca dan menulis file di C: tabel mode fopen, memeriksa NULL, menulis dengan fprintf dan fputc, membaca dengan fgets, fscanf, dan fgetc, loop baris per baris yang standar, dan kapan memakai mode biner.
- Argumen Command LineCara program C membaca command line-nya: anatomi argc dan argv, menelusuri argumen, isi argv[0], mengonversi angka dengan strtol alih-alih atoi, dan kalkulator kecil yang menggabungkan semuanya.
Preprocessor
- PreprocessorPreprocessor mengedit teks sumbermu sebelum compiler melihatnya: menempelkan header, mengganti makro, dan menyalakan atau mematikan bagian kode. Ini seluruh keluarga direktifnya dan cara melihat output-nya.
- MakroMakro seperti objek dan seperti fungsi dengan #define: kenapa setiap argumen dan seluruh badan makro butuh tanda kurung, jebakan evaluasi berulang, makro multi-baris dengan do-while(0), dan kapan fungsi atau const lebih tepat.
- File headerCara membagi program C ke beberapa file: apa yang masuk ke .h, apa yang masuk ke .c, include guard yang mencegah include ganda, mengompilasi beberapa file sekaligus, dan berbagi variabel global dengan extern.
- Kompilasi BersyaratKompilasi kode yang berbeda untuk build yang berbeda dengan #ifdef, #ifndef, #if, #elif, dan #else: saklar debug, cabang per platform, mendefinisikan macro dari command line dengan -D, dan memakai #if 0 untuk menonaktifkan kode.
Pustaka Standar
- Fungsi matematikaTur singkat math.h: sqrt, pow, fabs, floor dan ceil, round, fmod, keluarga fungsi trigonometri dan logaritma, INFINITY dan NAN. Ditambah flag linker -lm yang jadi penyebab error klasik undefined reference.
- Angka acakCara membuat angka acak di C dengan rand() dan RAND_MAX, kenapa seed dengan srand(time(NULL)) cukup sekali, memetakan ke sebuah rentang dengan % beserta bias kecil yang ditimbulkannya, double acak, dan deret yang bisa diulang.
- Pustaka StandarApa yang diberikan setiap header standar: stdio.h, stdlib.h, string.h, math.h, time.h, ctype.h, limits.h, stdbool.h, stdint.h, dan assert.h, masing-masing dengan contoh singkat yang bisa dijalankan.
Error & Debugging
- Segmentation faultSegfault berarti programmu menyentuh memori yang bukan miliknya. Ini lima penyebab yang mencakup hampir semua kasusnya, masing-masing dengan contoh minimal dan perbaikannya, ditambah cara menemukan baris yang tepat dengan gdb dan AddressSanitizer.
- Error UmumKesalahan yang pernah dibuat setiap programmer C setidaknya sekali: lupa titik koma, = alih-alih ==, implicit declaration, scanf tanpa &, membandingkan string dengan ==, pembagian integer, variabel yang belum diinisialisasi, dan off-by-one. Masing-masing dijelaskan lewat gejala, penyebab, dan solusinya.
- Undefined BehaviorUndefined behavior adalah kode yang sama sekali tidak diatur oleh standar C, jadi apa pun bisa terjadi, termasuk optimizer menghapus pengecekanmu. Berikut penyebabnya, kenapa "di komputerku jalan" tidak membuktikan apa-apa, dan flag yang bisa menangkapnya.