Bab 1 Pengantar C
Pahami apa itu bahasa C, mengapa bahasa ini masih relevan, dan posisinya di antara bahasa pemrograman lain.
Buka → # Sejarah dan Perkembangan CTelusuri asal mula C di Bell Labs, perkembangannya dari BCPL dan B, hingga menjadi bahasa sistem Unix.
Buka → # Kegunaan dan Ekosistem CPelajari bidang yang memakai C: sistem operasi, embedded, game engine, hingga library bahasa lain.
Buka → # Compiler, Linker, dan ExecutablePahami perjalanan kode sumber .c menjadi program akhir: preprocessing, compile, assemble, dan link.
Buka → # Standar Bahasa CKenali ISO/IEC 9899 dan versi standar C: C89, C99, C11, C17, dan C23.
Buka → # Instalasi CompilerPasang GCC atau Clang di sistem operasi Anda dan verifikasi instalasi berhasil.
Buka → # Menyiapkan EnvironmentSusun environment pengembangan C: PATH, editor, terminal, dan tools pendukung.
Buka → # Menggunakan TerminalKuasai perintah terminal dasar untuk menavigasi direktori, mengompilasi, dan menjalankan program C.
Buka → # Editor dan IDEBandingkan editor dan IDE populer untuk C: VS Code, CLion, Vim, dan Emacs.
Buka → # Program C PertamaTulis, kompilasi, dan jalankan program hello world pertama Anda dalam bahasa C.
Buka → # Proses KompilasiBedah empat tahap kompilasi: preprocessing, compilation, assembly, dan linking.
Buka → # Menjalankan ProgramPelajari cara menjalankan executable C, argumen command line, dan exit code.
Buka → # Struktur Direktori ProyekRancang struktur direktori proyek C yang rapi: src, include, build, tests.
Buka → # Debugging AwalPelajari debugging dasar dengan printf, gdb, dan cara membaca pesan error compiler.
Buka →Bab 2 Dasar Pemrograman C
Pahami kerangka umum program C: preprocessor directive, fungsi, dan blok kode.
Buka → # Fungsi mainPelajari titik masuk program C: signature main, return value, dan argumen command line.
Buka → # Preprocessor DirectivesKenali directive #include, #define, dan cara kerja preprocessor C.
Buka → # Header FilesPahami peran file header .h, deklarasi vs definisi, dan konvensi penyusunan header.
Buka → # KomentarTulis komentar /* */ dan // yang membantu pembaca tanpa berlebihan.
Buka → # Statement dan ExpressionBedakan statement dan expression dalam C, dan cara keduanya disusun menjadi program.
Buka → # Blok KodePahami penggunaan kurung kurawal {} untuk membentuk blok kode dan scope.
Buka → # Identifier dan KeywordPelajari aturan penamaan identifier dan daftar keyword yang tidak boleh dipakai sebagai nama.
Buka → # Aturan Penulisan CKuasai konvensi penulisan C: case sensitivity, titik koma, indentasi, dan whitespace.
Buka → # Compiler WarningsPahami pentingnya warnings, flag -Wall -Wextra, dan cara membaca pesan peringatan compiler.
Buka →Bab 3 Tipe Data dan Variabel
Pahami konsep variabel sebagai nama untuk lokasi memori yang menyimpan nilai bertipe tertentu.
Buka → # Deklarasi dan InisialisasiPelajari cara mendeklarasikan variabel dan memberi nilai awal sekaligus.
Buka → # Tipe charPelajari tipe char untuk menyimpan karakter dan byte kecil, beserta kode ASCII.
Buka → # Tipe IntegerPahami tipe int, ukurannya, dan representasi bilangan bulat bertanda.
Buka → # Tipe Floating PointPelajari float, double, dan long double untuk bilangan desimal.
Buka → # signed dan unsignedPahami perbedaan tipe signed dan unsigned serta implikasi rentang nilainya.
Buka → # short, long, dan long longPelajari modifier short, long, dan long long untuk menyesuaikan ukuran integer.
Buka → # sizeof dan size_tGunakan operator sizeof dan tipe size_t untuk menangani ukuran data secara portabel.
Buka → # limits.hPelajari header limits.h dan float.h yang mendefinisikan batas nilai tiap tipe.
Buka → # KonstantaPahami cara mendefinisikan konstanta dengan #define dan keyword const.
Buka → # const QualifierPelajari keyword const untuk menandai variabel yang tidak boleh diubah setelah inisialisasi.
Buka → # LiteralKenali literal integer, floating point, karakter, dan string dalam kode C.
Buka → # Representasi AngkaPahami bagaimana bilangan disimpan dalam bentuk biner, heksadesimal, dan oktal.
Buka → # Integer OverflowPelajari apa itu integer overflow, perilaku undefined, dan cara mendeteksinya.
Buka → # Floating Point PrecisionPahami keterbatasan presisi floating point dan kesalahan pembulatan.
Buka → # Type QualifiersKenali qualifier const, volatile, restrict, dan _Atomic pada tipe data C.
Buka →Bab 4 Input dan Output
Gunakan fungsi printf untuk mencetak teks terformat ke stdout.
Buka → # Format SpecifiersKuasai format specifier %d, %f, %s, %c, %x, dan lebar field serta presisi.
Buka → # Escape SequencesPelajari escape sequence , , \, " dan kapan memakainya di string literal.
Buka → # scanfBaca input dari stdin dengan scanf dan format specifier yang sesuai.
Buka → # Membaca Input dengan fgetsBaca baris input dengan aman memakai fgets alih-alih scanf untuk string.
Buka → # Parsing InputParsing input kompleks dengan sscanf, strtok, dan strategi validasi.
Buka → # Input NumerikBaca angka integer dan float dari pengguna dengan validasi yang aman.
Buka → # Input KarakterBaca karakter tunggal dengan getchar dan getch, plus handling newline tersisa.
Buka → # stdout, stderr, dan stdinPahami tiga stream standar C dan kapan memakai stderr untuk pesan error.
Buka → # Penanganan Input Tidak ValidTangani input tidak valid: cek return value, bersihkan buffer, dan minta ulang.
Buka → # BufferingPelajari line-buffered, block-buffered, dan unbuffered I/O serta fflush.
Buka →Bab 5 Operator dan Ekspresi
Gunakan operator + - * / % dan pahami pembagian integer.
Buka → # Operator RelasionalPelajari operator == != < > <= >= yang menghasilkan nilai int 0 atau 1.
Buka → # Operator LogikaGunakan operator && || ! dan pahami short-circuit evaluation.
Buka → # Operator AssignmentPelajari operator = dan bentuk augmented seperti += -= *= /= %=.
Buka → # Increment dan DecrementPahami prefix dan postfix ++ -- serta urutan evaluasinya.
Buka → # Operator BitwiseGunakan operator & | ^ ~ << >> untuk manipulasi bit.
Buka → # Operator ConditionalPelajari operator ternary ? : dan kapan memakainya menggantikan if-else.
Buka → # Operator sizeofPahami operator sizeof untuk memeriksa ukuran tipe dan objek pada compile time.
Buka → # Operator KomaPelajari operator , untuk mengevaluasi beberapa ekspresi secara berurutan.
Buka → # Precedence dan AssociativityKuasai tabel precedence operator C dan urutan evaluasi ekspresi.
Buka → # Type ConversionPahami implicit type conversion yang dilakukan compiler pada ekspresi campuran.
Buka → # Type CastingLakukan explicit type cast dengan operator (type) untuk konversi sengaja.
Buka → # Integer PromotionsPelajari aturan integer promotion yang menaikkan tipe kecil ke int sebelum operasi.
Buka → # Usual Arithmetic ConversionsPahami aturan usual arithmetic conversions saat dua operand memiliki tipe berbeda.
Buka → # Undefined Behavior dalam EkspresiHindari UB seperti unsequenced modification dan signed overflow pada ekspresi.
Buka →Bab 6 Percabangan
Pahami konsep boolean di C: nilai 0 adalah false, selainnya true.
Buka → # ifGunakan statement if untuk mengeksekusi blok kode berdasarkan kondisi.
Buka → # if-elsePelajari if-else untuk memilih antara dua cabang eksekusi.
Buka → # else ifSusun rantai else if untuk menangani banyak kondisi yang saling eksklusif.
Buka → # Nested ifPahami if bersarang dan cara menjaga keterbacaan kode.
Buka → # switchGunakan switch untuk dispatch berbasis nilai konstanta integer atau karakter.
Buka → # case dan defaultPelajari label case dan default di dalam switch statement.
Buka → # break dan fallthroughPahami kapan break diperlukan dan kapan fallthrough sengaja dimanfaatkan.
Buka → # Operator Conditional sebagai PercabanganBandingkan operator ternary ? : dengan if-else dan kapan memakainya.
Buka → # Strategi Menyusun KondisiPelajari strategi menyusun kondisi agar kode tetap jelas dan mudah dibaca.
Buka →Bab 7 Perulangan
Gunakan while untuk perulangan dengan kondisi yang dicek di awal.
Buka → # do-whilePelajari do-while yang mengeksekusi body minimal satu kali sebelum cek kondisi.
Buka → # forKuasai loop for yang menggabungkan init, kondisi, dan update di satu tempat.
Buka → # Nested LoopsPahami perulangan bersarang dan cara memakainya untuk tabel dan matriks.
Buka → # breakKeluar dari loop lebih awal dengan statement break.
Buka → # continueLewati sisa body loop dengan continue dan lanjut ke iterasi berikutnya.
Buka → # Infinite LoopsKenali pola infinite loop dan kapan memakainya dengan break untuk keluar.
Buka → # Loop Control VariablesPahami variabel kontrol loop, scope-nya, dan cara memilih tipe yang tepat.
Buka → # Off-by-One ErrorsHindari kesalahan klasik off-by-one pada batas loop dan indeks array.
Buka → # Memilih Jenis PerulanganPelajari kriteria memilih while, do-while, atau for untuk setiap skenario.
Buka →Bab 8 Fungsi
Pahami fungsi sebagai unit reusable kode dengan input, output, dan tanggung jawab tunggal.
Buka → # Function DeclarationPelajari deklarasi fungsi (prototype) untuk memberi tahu compiler tentang signature fungsi.
Buka → # Function DefinitionTulis definisi fungsi lengkap dengan body dan implementasi.
Buka → # Function PrototypePahami kapan prototype wajib dan manfaatnya untuk type checking.
Buka → # Parameter dan ArgumentBedakan parameter (definisi) dan argument (pemanggilan) serta passing mode C.
Buka → # Return ValuePelajari return value, multiple return via pointer, dan return dari void function.
Buka → # void FunctionsTulis fungsi void untuk aksi tanpa nilai balik, plus early return.
Buka → # Pass by ValuePahami bahwa C selalu pass by value, termasuk pointer yang nilainya adalah alamat.
Buka → # Pointer ParametersGunakan parameter pointer untuk mengubah variabel pemanggil atau menghindari copy besar.
Buka → # Scope VariabelPelajari block scope, file scope, function scope, dan prototype scope variabel.
Buka → # Local dan Global VariablesBandingkan variabel lokal dan global, plus kapan menghindari global.
Buka → # Static Local VariablesPahami variabel lokal static yang mempertahankan nilainya antar pemanggilan fungsi.
Buka → # RecursionPelajari recursion: base case, recursive case, dan bahaya stack overflow.
Buka → # Function Pointers (Pengantar)Kenali function pointer sebagai cara melewatkan fungsi sebagai data.
Buka → # Merancang FungsiPelajari prinsip merancang fungsi: single responsibility, nama jelas, parameter minimal.
Buka →Bab 9 Array
Pahami array sebagai kumpulan elemen bertipe sama yang menempati memori berurutan.
Buka → # Deklarasi ArrayPelajari sintaks deklarasi array dan penentuan ukuran.
Buka → # Inisialisasi ArrayInisialisasi array dengan list initializer, designated initializer, dan partial init.
Buka → # Mengakses Elemen ArrayAkses elemen array dengan indeks dan pahami zero-based indexing.
Buka → # Iterasi ArrayIterasi array dengan for dan pelajari pola umum traversal.
Buka → # Array sebagai ParameterPahami decay array menjadi pointer saat dilewatkan ke fungsi dan implikasinya.
Buka → # Ukuran Array dan LengthHitung jumlah elemen array dengan sizeof(arr)/sizeof(arr[0]).
Buka → # Multidimensional ArraysPelajari array 2D dan 3D, row-major order, dan akses elemen.
Buka → # Arrays dan MemoriPahami layout array di memori dan alignment elemen.
Buka → # Array of StringsBuat array of strings dengan char[][] dan char*[].
Buka → # Array of StructuresSusun kumpulan struct dalam array untuk data terstruktur.
Buka → # Variable Length ArraysPelajari VLA (C99) yang ukurannya ditentukan saat runtime.
Buka → # Kesalahan Umum ArrayHindari out-of-bounds, uninitialized array, dan sizeof pada parameter.
Buka →Bab 10 String
Pahami bahwa string C adalah array char yang diakhiri null terminator.
Buka → # Null TerminatorPelajari peran karakter '�' sebagai penanda akhir string.
Buka → # Deklarasi StringDeklarasikan string sebagai char array atau char pointer ke string literal.
Buka → # String LiteralsPahami string literal di read-only memory dan sifatnya yang tidak boleh diubah.
Buka → # Array char dan Pointer charBandingkan deklarasi char str[] dan char *str dan implikasi mutabilitasnya.
Buka → # strlenHitung panjang string dengan strlen tanpa menghitung null terminator.
Buka → # strcpy dan strncpySalin string dengan strcpy dan versi aman strncpy.
Buka → # strcat dan strncatGabungkan string dengan strcat dan versi bounded strncat.
Buka → # strcmpBandingkan dua string dengan strcmp dan pahami return value -1, 0, 1.
Buka → # strchr dan strstrCari karakter dan substring dengan strchr dan strstr.
Buka → # Membaca StringBaca string dari stdin dengan fgets bukan scanf %s.
Buka → # Memotong dan Memecah StringPecah string menjadi token dengan strtok dan strategi penggunaannya.
Buka → # Konversi String ke AngkaKonversi string ke angka dengan atoi, strtol, dan strtod.
Buka → # String dan EncodingPelajari encoding ASCII, UTF-8, dan multibyte character di C.
Buka → # Keamanan Pemrosesan StringHindari buffer overflow pada string dengan strlen check dan fungsi bounded.
Buka →Bab 11 Pointer
Pahami pointer sebagai variabel yang menyimpan alamat memori variabel lain.
Buka → # Alamat MemoriPelajari konsep alamat memori, layout virtual memory, dan ukuran pointer.
Buka → # Address-of OperatorGunakan operator & untuk memperoleh alamat suatu variabel.
Buka → # Dereference OperatorGunakan operator * untuk membaca atau menulis nilai pada alamat yang ditunjuk pointer.
Buka → # Deklarasi PointerPelajari sintaks deklarasi pointer dan cara membaca tipe pointer.
Buka → # Null PointerPahami NULL, nullptr di C23, dan pentingnya inisialisasi pointer.
Buka → # Pointer ArithmeticPelajari penjumlahan, pengurangan, dan perbandingan pointer.
Buka → # Pointer dan ArrayPahami hubungan erat antara pointer dan array, plus decay.
Buka → # Pointer dan StringManipulasi string via char pointer dan iterasi karakter.
Buka → # Pointer sebagai ParameterLewatkan pointer ke fungsi untuk mengubah variabel pemanggil atau efisiensi.
Buka → # Pointer ke PointerPelajari pointer yang menunjuk pointer lain dan kasus pemakaiannya.
Buka → # void PointerPahami void * sebagai pointer generik dan cara casting-nya.
Buka → # const dan PointerBedakan const int *, int * const, dan const int * const.
Buka → # Function PointerPelajari deklarasi dan pemakaian function pointer untuk callback dan dispatch.
Buka → # Dangling PointerKenali dangling pointer setelah free dan bahaya mengaksesnya.
Buka → # Wild PointerHindari wild pointer yang tidak diinisialisasi dan cara mencegahnya.
Buka → # Pointer AliasingPahami aliasing dan efeknya pada optimasi compiler, plus restrict.
Buka → # Pointer SafetyPelajari praktik aman: inisialisasi, cek NULL, dan hindari arithmetic keluar bounds.
Buka →Bab 12 struct, union, dan enum
Pahami struct sebagai agregasi tipe data berbeda menjadi satu unit.
Buka → # Deklarasi structPelajari sintaks deklarasi struct, tag, dan variabel struct.
Buka → # Mengakses Member structAkses member struct dengan operator titik dan arrow.
Buka → # struct dan typedefGunakan typedef untuk membuat alias tipe struct yang lebih ringkas.
Buka → # Nested structPelajari struct yang berisi struct lain sebagai member.
Buka → # Array of structSusun kumpulan data terstruktur dalam array of struct.
Buka → # Pointer to structPahami pointer ke struct, alokasi dinamis, dan akses via arrow operator.
Buka → # Structure PaddingPelajari padding dan alignment di struct serta pragma pack.
Buka → # Bit-fieldsGunakan bit-fields untuk menyimpan data dalam ukuran bit tertentu.
Buka → # unionPahami union yang anggotanya berbagi memori yang sama.
Buka → # enumDefinisikan kumpulan konstanta integer bernama dengan enum.
Buka → # Tagged UnionKombinasikan enum dan union untuk tipe data yang aman dengan tag.
Buka → # Merancang Data StructuresPelajari prinsip merancang struct: keterbacaan, alignment, dan enkapsulasi.
Buka →Bab 13 Memory Management
Pahami layout memori program C: text, data, bss, heap, dan stack.
Buka → # Stack dan HeapBandingkan stack allocation dan heap allocation serta tradeoff-nya.
Buka → # Lifetime dan Storage DurationPelajari konsep lifetime dan tiga storage duration di C.
Buka → # Automatic, Static, dan Allocated StorageBedakan automatic, static, dan allocated storage duration pada variabel.
Buka → # mallocAlokasikan memori heap dengan malloc dan kembalikan pointer void *.
Buka → # callocAlokasikan memori yang sudah di-zero-kan dengan calloc.
Buka → # reallocUbah ukuran blok memori yang sudah dialokasikan dengan realloc.
Buka → # freeKembalikan memori heap ke sistem dengan free dan hindari leak.
Buka → # Ownership dan LifetimePahami konsep ownership: siapa yang bertanggung jawab memfree memori.
Buka → # Memory LeaksKenali penyebab memory leak dan cara mendeteksinya.
Buka → # Double FreeHindari double free yang menyebabkan undefined behavior.
Buka → # Use After FreePahami bahaya use after free dan cara mencegahnya.
Buka → # Buffer OverflowKenali buffer overflow dan dampak keamanannya.
Buka → # Out-of-Bounds AccessHindari akses array di luar bounds yang menyebabkan UB.
Buka → # Alignment dan PaddingPelajari alignment requirement tipe data dan padding di struct.
Buka → # Flexible Array MembersGunakan flexible array member untuk struct dengan array variabel.
Buka → # Strategi Memory SafetyPelajari strategi menulis kode C yang aman dari kesalahan memori.
Buka →Bab 14 Preprocessor dan Modularitas
Pahami tahap preprocessing sebelum compile dan directive yang diproses.
Buka → # #include DirectiveGunakan #include untuk menyertakan header sistem dan header lokal.
Buka → # #define dan #undefDefinisikan macro konstanta dan hapus dengan #undef.
Buka → # Macro ParametersBuat function-like macro dengan parameter dan aturan penggunaannya.
Buka → # Macro ExpansionPahami bagaimana macro diexpand dan bahaya side effect ganda.
Buka → # Conditional CompilationGunakan #ifdef #ifndef #if #else #elif #endif untuk kompilasi kondisional.
Buka → # Include GuardsCegah multiple inclusion header dengan include guards #ifndef.
Buka → # #pragma oncePelajari alternatif include guard #pragma once dan portabilitasnya.
Buka → # Header OrganizationSusun header dengan rapi: deklarasi publik di .h, definisi di .c.
Buka → # Source Files dan Header FilesBedakan peran file .c dan .h dalam proyek C.
Buka → # Separate CompilationKompilasi setiap file .c terpisah lalu link menjadi satu executable.
Buka → # External LinkagePahami external linkage dan keyword extern untuk variabel global lintas file.
Buka → # static LinkageGunakan keyword static untuk membatasi visibility ke file saat ini.
Buka → # externDeklarasikan variabel dan fungsi eksternal dengan keyword extern.
Buka → # inline FunctionsPelajari keyword inline untuk fungsi yang diharapkan cepat.
Buka → # Membangun Modul CRancang modul C sebagai unit .h + .c yang dapat dipakai ulang.
Buka →Bab 15 File Handling
Pahami file sebagai stream byte di disk dan abstraksi FILE di C.
Buka → # File PointerKenali tipe FILE * dan posisi file pointer dalam stream.
Buka → # fopen dan fcloseBuka file dengan fopen dan tutup dengan fclose beserta error handling.
Buka → # File ModesPelajari mode r, w, a, rb, wb dan perbedaan teks vs biner.
Buka → # fprintf dan fscanfTulis dan baca data terformat ke file dengan fprintf dan fscanf.
Buka → # fgets dan fputsBaca dan tulis baris teks dengan fgets dan fputs.
Buka → # fread dan fwriteBaca dan tulis blok biner dengan fread dan fwrite.
Buka → # fseek, ftell, dan rewindNavigasi posisi file dengan fseek, ftell, dan rewind.
Buka → # feof dan ferrorDeteksi EOF dan error I/O dengan feof dan ferror.
Buka → # errno dan perrorLaporkan error sistem dengan errno dan perror.
Buka → # File TeksBaca dan tulis file teks termasuk penanganan newline.
Buka → # File BinerBaca dan tulis file biner dengan struktur data tetap.
Buka → # Format FileRancang format file: delimiter, fixed-width, dan header.
Buka → # Path dan DirektoriKelola path file lintas platform dengan / dan backslash.
Buka → # Temporary FilesBuat file sementara dengan tmpfile dan mkstemp.
Buka → # Atomic File UpdatesLakukan update file atomik dengan write-then-rename.
Buka → # Keamanan File I/OHindari TOCTOU, path traversal, dan race condition pada file.
Buka →Bab 16 Error Handling
Klasifikasikan error: programmer error, runtime error, sistem error.
Buka → # Return CodesSinyalkan error lewat return value fungsi dan konvensi 0 sukses / non-zero gagal.
Buka → # errnoPahami variabel global errno dan cara membacanya setelah fungsi gagal.
Buka → # perror dan strerrorCetak pesan error yang terbaca dengan perror dan strerror.
Buka → # assertGunakan macro assert untuk invariant yang wajib selama development.
Buka → # Defensive ProgrammingTulis kode defensif: validasi parameter, cek NULL, dan fallback.
Buka → # Validasi ParameterPeriksa parameter fungsi di awal dan tolak input tidak valid lebih awal.
Buka → # Cleanup ResourcesPastikan file, memori, dan resource dibebaskan di jalur error.
Buka → # Error PropagationPropagasikan error ke pemanggil lewat return code atau output parameter.
Buka → # Merancang Error HandlingRancang strategi error handling yang konsisten di seluruh proyek.
Buka →Bab 17 Standard Library
Pelajari header stdio.h: printf, scanf, fgets, file I/O, dan stream.
Buka → # stdlib.hPelajari header stdlib.h: malloc, exit, atoi, rand, qsort.
Buka → # string.hPelajari header string.h: strlen, strcpy, strcat, strcmp, memcpy, memset.
Buka → # ctype.hGunakan ctype.h untuk klasifikasi dan konversi karakter.
Buka → # math.hGunakan math.h untuk fungsi matematika: sqrt, pow, sin, cos, log.
Buka → # time.hPelajari time.h: time, clock, difftime, dan struct tm.
Buka → # limits.h dan float.hPakai limits.h dan float.h untuk batas nilai tipe data.
Buka → # stdint.hGunakan tipe integer width eksplisit: int32_t, uint64_t, int_least16_t.
Buka → # inttypes.hPelajari format specifier untuk tipe stdint.h dan macro PRId32 dst.
Buka → # stdbool.hAktifkan tipe bool, true, dan false (C99) lewat stdbool.h.
Buka → # stddef.hPahami tipe size_t, ptrdiff_t, dan NULL dari stddef.h.
Buka → # errno.hPelajari konstanta errno: EINVAL, ENOMEM, ERANGE, dan makna-nya.
Buka → # assert.hGunakan assert dan static_assert (C11) untuk menegakkan invariant.
Buka → # locale.hPelajari setlocale dan konfigurasi format angka lokal.
Buka → # signal.hTangani sinyal seperti SIGINT dan SIGSEGV dengan signal handler.
Buka → # setjmp.hPahami setjmp/longjmp untuk non-local jump dan bahayanya.
Buka → # Memahami Dokumentasi LibraryBaca dokumentasi standard library di cppreference.com dan standard.
Buka →Bab 18 Algoritma dan Struktur Data
Pelajari cara menganalisis kompleksitas waktu dan ruang algoritma.
Buka → # Notasi Big OPahami notasi Big O, Omega, dan Theta untuk mengukur kompleksitas.
Buka → # Linear SearchImplementasikan pencarian linear pada array dan analisis kompleksitasnya.
Buka → # Binary SearchImplementasikan binary search pada array terurut dengan kompleksitas O(log n).
Buka → # Bubble SortPelajari bubble sort, kompleksitas O(n^2), dan kapan memakainya.
Buka → # Selection SortImplementasikan selection sort dan pahami tradeoff-nya.
Buka → # Insertion SortPelajari insertion sort yang efisien untuk data hampir terurut.
Buka → # Merge SortImplementasikan merge sort divide-and-conquer dengan kompleksitas O(n log n).
Buka → # QuicksortPelajari quicksort, pivot selection, dan kompleksitas average vs worst case.
Buka → # Sorting dan SearchingBandingkan algoritma sorting dan kapan memakai binary search.
Buka → # Linked ListImplementasikan singly dan doubly linked list dengan dynamic allocation.
Buka → # StackBangun struktur data stack dengan array atau linked list.
Buka → # QueueImplementasikan queue FIFO dengan array sirkular atau linked list.
Buka → # Circular BufferPelajari circular buffer untuk data streaming yang efisien.
Buka → # Hash TableImplementasikan hash table dengan chaining dan open addressing.
Buka → # Binary TreePelajari binary tree, traversal inorder/preorder/postorder, dan BST.
Buka → # Heap dan Priority QueueImplementasikan binary heap dan priority queue.
Buka → # GraphPelajari representasi graph dengan adjacency matrix dan list.
Buka → # Memilih Struktur DataPelajari kriteria memilih struktur data yang tepat untuk setiap masalah.
Buka →Bab 19 Advanced C
Kuasai deklarasi dan pemakaian function pointer untuk callback tingkat lanjut.
Buka → # CallbacksRancang API berbasis callback untuk event-driven dan inversion of control.
Buka → # Generic Programming dengan void PointerTulis fungsi generik memakai void * dan callback, seperti qsort.
Buka → # qsort dan bsearchPakai qsort dan bsearch dari stdlib.h dengan comparator function.
Buka → # Variadic FunctionsTulis fungsi dengan jumlah argumen variabel seperti printf.
Buka → # va_list dan va_argsAkses argumen variadic lewat va_list, va_start, va_arg, va_end.
Buka → # Compound LiteralsBuat objek anonim inline dengan compound literals (C99).
Buka → # Designated InitializersInisialisasi struct dan array dengan designated initializer (C99).
Buka → # Flexible Array MembersPelajari FAM di akhir struct untuk data variabel (C99).
Buka → # restrict QualifierPakai restrict untuk menandai tidak ada aliasing dan bantu optimasi.
Buka → # volatile QualifierPahami volatile untuk akses memory-mapped IO dan signal handler.
Buka → # AtomicsPelajari _Atomic dan stdatomic.h untuk operasi concurrent tanpa race.
Buka → # Memory ModelPahami memory model C11: sequential consistency dan ordering.
Buka → # AlignmentPelajari _Alignas, _Alignof, alignof, dan aligned_alloc.
Buka → # Bit ManipulationKuasai teknik manipulasi bit: set, clear, toggle, dan check bit.
Buka → # Implementation-Defined BehaviorBedakan implementation-defined behavior dan implikasi portabilitas.
Buka → # Unspecified BehaviorPahami unspecified behavior dan cara menulis kode yang tidak mengandalkannya.
Buka → # Undefined BehaviorKenali daftar UB di C dan strategi menghindarinya.
Buka → # PortabilityTulis kode C portabel lintas compiler, OS, dan arsitektur.
Buka →Bab 20 Build System dan Toolchain
Pahami tahap build C: preprocess, compile, assemble, link.
Buka → # Compiler OptionsPelajari flag compiler penting: -std, -O, -g, -Wall, -I, -L, -l.
Buka → # GCC dan ClangBandingkan GCC dan Clang, kelebihan, dan kapan memilih salah satu.
Buka → # Object FilesPahami format file .o: symbol table, relocation, dan section.
Buka → # LinkerPelajari tahap linking: symbol resolution, relocation, dan executable.
Buka → # Static LibraryBuat static library .a dengan ar dan pakai dalam build.
Buka → # Shared LibraryBuat shared library .so dengan -fPIC dan -shared.
Buka → # pkg-configGunakan pkg-config untuk mengelola flag compiler dan linker library.
Buka → # MakefileTulis Makefile dengan rule, variable, dan automatic variable.
Buka → # makePelajari cara make membaca Makefile dan menjalankan target.
Buka → # CMakeSusun CMakeLists.txt untuk build cross-platform.
Buka → # Build ConfigurationsKelola build Debug, Release, dan RelWithDebInfo.
Buka → # Cross CompilationBuild untuk target arsitektur berbeda dengan cross-toolchain.
Buka → # Reproducible BuildsBangun binary yang reproducible: timestamp, path, dan ordering.
Buka → # Continuous IntegrationOtomasi build dan test di CI dengan GitHub Actions atau GitLab CI.
Buka →Bab 21 Debugging dan Diagnostics
Pahami format pesan error compiler dan cara menguraikan akar masalah.
Buka → # Warnings dan DiagnosticsBedakan warning dan error, plus flag -Werror untuk menaikkannya.
Buka → # Debugging dengan gdbMulai sesi gdb, jalankan program, dan inspeksi crash.
Buka → # BreakpointsPasang breakpoint baris, fungsi, dan kondisional di gdb.
Buka → # Stepping dan InspectionLakukan step, next, finish, dan inspeksi variabel di gdb.
Buka → # WatchpointsPantau perubahan variabel dengan watchpoints di gdb.
Buka → # Core DumpsAnalisis core dump untuk crash yang sudah terjadi.
Buka → # AddressSanitizerAktifkan ASan untuk mendeteksi buffer overflow dan use-after-free.
Buka → # UndefinedBehaviorSanitizerPakai UBSan untuk mendeteksi UB saat runtime.
Buka → # LeakSanitizerDeteksi memory leak dengan LSan.
Buka → # ValgrindPakai valgrind untuk profiling memory dan deteksi error.
Buka → # Static AnalysisPelajari cppcheck, clang-tidy, dan clang analyzer.
Buka → # ProfilingProfile performa program dengan perf, gprof, dan callgrind.
Buka → # Strategi DebuggingSusun strategi debugging sistematis: repro, isolasi, hipotesis, verifikasi.
Buka →Bab 22 Testing dan Quality Assurance
Pahami mengapa testing diperlukan dan benefit jangka panjangnya.
Buka → # Unit TestingTulis unit test untuk fungsi individual dan isolasi dependency.
Buka → # Integration TestingLakukan integration test untuk modul yang bekerja bersama.
Buka → # Test-Driven DevelopmentPelajari siklus Red-Green-Refactor TDD.
Buka → # Test FrameworksKenali framework test C: Unity, CMocka, Criterion, dan Check.
Buka → # Membuat Test HarnessBangun test harness sederhana tanpa framework ketergantungan.
Buka → # AssertionsGunakan assert di test dan bedakan dengan assert produksi.
Buka → # Boundary TestingUji batas input: minimum, maksimum, dan off-by-one.
Buka → # Property-Based TestingPelajari property-based testing dengan input acak dan invariant.
Buka → # Fuzz TestingLakukan fuzz testing untuk menemukan crash dari input acak.
Buka → # Regression TestingCegah bug kembali dengan regression test suite.
Buka → # Code CoverageUkur cakupan test dengan gcov dan lcov.
Buka → # Sanitizers dalam TestingIntegrasikan ASan, UBSan, dan LSan ke test pipeline.
Buka → # Test AutomationOtomasi eksekusi test di CI dan laporkan hasil.
Buka →Bab 23 Secure C Programming
Pahami prinsip secure coding dan tanggung jawab programmer C.
Buka → # Input ValidationValidasi input di boundary: tipe, panjang, dan rentang nilai.
Buka → # Buffer Overflow PreventionCegah buffer overflow dengan bounded function dan cek panjang.
Buka → # Integer Overflow PreventionDeteksi dan tangani integer overflow sebelum menjadi kerentanan.
Buka → # Memory SafetyTulis kode yang aman dari use-after-free, double free, dan leak.
Buka → # Format String VulnerabilitiesHindari printf(user_input) dan selalu pakai format specifier tetap.
Buka → # Path TraversalCegah path traversal dengan validasi dan canonicalization.
Buka → # Race ConditionsKenali TOCTOU dan race condition pada file dan shared state.
Buka → # Secure File HandlingKelola permission file dan hindari symlink attack.
Buka → # Random Number GenerationBedakan rand() tidak aman dengan random yang aman /dev/urandom.
Buka → # Cryptography BasicsKenali library crypto dan jangan pernah roll-your-own.
Buka → # Secure Dependency ManagementAudit library pihak ketiga dan kelola vulnerability.
Buka → # Threat ModelingLakukan threat modeling untuk merancang defense yang tepat.
Buka → # Secure Coding ChecklistGunakan checklist secure coding sebelum release.
Buka →Bab 24 Concurrency dan System Programming
Bedakan proses dan thread dan kapan memilih salah satu.
Buka → # Dasar ConcurrencyPahami concurrency, parallelism, dan tantangan koordinasi.
Buka → # Thread SafetyTulis fungsi reentrant dan thread-safe dengan mudah.
Buka → # Race ConditionKenali race condition dan bahaya shared mutable state.
Buka → # Mutex dan LockLindungi shared state dengan pthread mutex.
Buka → # Condition VariablesSinkronisasi producer-consumer dengan condition variable.
Buka → # Atomics dalam PraktikPakai _Atomic dan operasi lock-free yang benar.
Buka → # DeadlockHindari deadlock dengan lock ordering dan timeout.
Buka → # Process CreationBuat proses baru dengan fork dan exec.
Buka → # SignalsTangani sinyal Unix dengan signal handler yang aman.
Buka → # Pipes dan Inter-Process CommunicationKomunikasi antar proses dengan pipe, FIFO, dan shared memory.
Buka → # Sockets (Pengantar)Pelajari dasar socket untuk komunikasi jaringan dan IPC.
Buka → # File DescriptorsPahami file descriptor dan operasi low-level read/write.
Buka → # Portabilitas POSIX dan WindowsTulis kode sistem yang portabel antara POSIX dan Windows.
Buka →Bab 25 Jaringan dan Protokol
Pahami OSI layer, TCP/IP, dan konsep host, port, dan protokol.
Buka → # TCP dan UDPBandingkan TCP yang reliable dengan UDP yang connectionless.
Buka → # Socket ProgrammingBuat socket, bind, listen, accept, connect, send, dan recv.
Buka → # Client-ServerBangun arsitektur client-server sederhana dengan socket.
Buka → # Serialisasi DataSerialisasi data lintas mesin: text vs biner, endianness.
Buka → # Parsing ProtokolParse protokol teks line-based dan biner dengan aman.
Buka → # Timeout dan RetryImplementasikan timeout socket dan strategi retry exponential backoff.
Buka → # Network Error HandlingTangani error jaringan: connection refused, broken pipe, dan timeout.
Buka → # TLS dan Secure CommunicationAmankan komunikasi dengan TLS lewat OpenSSL atau mbedTLS.
Buka → # Network TestingTest aplikasi jaringan dengan mock, capture, dan loopback.
Buka →Bab 26 Interoperabilitas dan FFI
Pahami C ABI sebagai standar de facto FFI lintas bahasa.
Buka → # Calling ConventionsPelajari cdecl, stdcall, fastcall, dan implikasi-nya.
Buka → # Shared Library InterfacesRancang interface shared library yang stabil dan bisa dipakai lintas bahasa.
Buka → # Opaque PointersSembunyikan detail struct dengan opaque pointer untuk encapsulation.
Buka → # API Design untuk C LibraryRancang API library C yang bersih, konsisten, dan mudah dipakai.
Buka → # Menggunakan Library EksternalKonsumsi library C pihak ketiga: header, link, dan distribusi.
Buka → # C dan PythonPakai C dari Python lewat ctypes, cffi, dan CPython extension.
Buka → # C dan C++Interoperabilitas C dan C++ lewat extern C dan header bersama.
Buka → # C dan RustPanggil C dari Rust dan Rust dari C lewat FFI.
Buka → # Versioning C APIVersioning API C dengan SONAME dan ABI compatibility.
Buka →Bab 27 Standar dan Portabilitas
Telusuri perkembangan standar C dari K&R hingga ISO/IEC 9899.
Buka → # C90 dan C95Pelajari standar C90 (ANSI C) dan C95 dengan wide character.
Buka → # C99Kenali fitur C99: //, VLA, designated init, dan stdint.h.
Buka → # C11Pelajari C11: atomics, threads, anonymous struct, dan _Generic.
Buka → # C17Pahami C17 sebagai bugfix release tanpa fitur baru.
Buka → # C23Kenali C23: nullptr, true/false keywords, dan fitur modern.
Buka → # Memilih Language StandardPilih -std yang tepat berdasarkan target compiler dan platform.
Buka → # Fitur Compiler ExtensionsKenali ekstensi GCC/Clang dan risiko portabilitasnya.
Buka → # Conditional Feature SupportDeteksi fitur compiler dengan __has_include dan __STDC_VERSION__.
Buka → # Endianness dan Representasi DataPahami little endian vs big endian dan implikasi network byte order.
Buka → # Portability ChecksAudit kode C untuk portabilitas lintas platform.
Buka → # Menulis C PortabelPelajari praktik menulis kode C portabel lintas OS dan arsitektur.
Buka →Bab 28 Coding Standards dan Architecture
Pilih gaya penamaan yang konsisten: snake_case, camelCase, dan PREFIX_.
Buka → # Formatting dan IndentationFormat kode dengan indentasi, spasi, dan brace style yang konsisten.
Buka → # Komentar dan DocumentationTulis komentar yang menjelaskan why, bukan what.
Buka → # Fungsi Kecil dan FokusRancang fungsi kecil dengan single responsibility dan panjang terbatas.
Buka → # Modular DesignPecah program menjadi modul .h/.c dengan tanggung jawab yang jelas.
Buka → # Dependency ManagementMinimalkan coupling antar modul dan kelola dependency build.
Buka → # API DesignRancang API publik yang minimal, konsisten, dan mudah dipelajari.
Buka → # Opaque Data TypesSembunyikan implementasi dengan opaque type untuk encapsulation.
Buka → # Separation of ConcernsPisahkan tanggung jawab: parsing, business logic, dan I/O.
Buka → # RefactoringRefactor kode lama secara bertahap dengan aman.
Buka → # Code ReviewLakukan code review untuk meningkatkan kualitas dan berbagi pengetahuan.
Buka → # Dokumentasi ProyekTulis README, ARCHITECTURE.md, dan dokumentasi API.
Buka →Bab 29 Proyek C
Bangun kalkulator terminal dengan operasi aritmetika, validasi input, dan test.
Lihat proyek → # Proyek 02: Game Tebak AngkaBangun game tebak angka dengan random number, loop, sistem skor, dan test.
Lihat proyek → # Proyek 03: Manajemen KontakBangun aplikasi manajemen kontak dengan CRUD, pencarian, dan penyimpanan file.
Lihat proyek → # Proyek 04: Pengelola TugasBangun aplikasi pengelola tugas dengan CRUD, filter, dan penyimpanan data.
Lihat proyek → # Proyek 05: Pemroses File CSVBangun pemroses file CSV dengan parsing, validasi, agregasi, dan export.
Lihat proyek → # Proyek 06: Struktur DataImplementasikan linked list, stack, queue, dan hash table dengan test.
Lihat proyek → # Proyek 10: Client-Server SederhanaBangun aplikasi client-server sederhana dengan socket dan protokol sendiri.
Lihat proyek → # Proyek 11: Command Line ToolBangun CLI tool dengan argument parsing, subcommands, config, dan logging.
Lihat proyek →Bab 30 Referensi
Ringkasan sintaks C dalam satu halaman untuk referensi cepat.
Buka → # Tabel OperatorTabel lengkap operator C: simbol, nama, precedence, associativity, dan contoh.
Buka → # Format SpecifiersTabel lengkap format specifier printf/scanf dengan lebar, presisi, dan modifier.
Buka → # Escape SequencesTabel escape sequences C: \ " dan kode heksadesimal/oktal.
Buka → # Tipe Data dan RentangTabel ukuran dan rentang tipe data C: char, int, long, float, double, dan stdint.
Buka → # Standard Library CheatsheetDaftar cepat fungsi standar C yang dikelompokkan per header file.
Buka → # Compiler FlagsTabel flag GCC/Clang: -std, -Wall, -O, -g, -I, -L, -l, dan sanitizer.
Buka → # GDB CheatsheetDaftar perintah gdb: run, break, step, next, print, backtrace, dan lainnya.
Buka → # Makefile CheatsheetSintaks Make: variabel, rule, automatic variables, dan function built-in.
Buka → # CMake CheatsheetPerintah CMake: cmake_minimum_required, project, add_executable, target_link_libraries, dan lainnya.
Buka → # Common Compiler ErrorsTabel error dan warning compiler C umum beserta penyebab dan perbaikan.
Buka → # Undefined Behavior ChecklistDaftar perilaku tak terdefinisi (UB) C: signed overflow, null deref, use-after-free.
Buka → # Secure C ChecklistDaftar periksa praktik aman: input validation, buffer bounds, format string, dan sebagainya.
Buka → # GlosariumGlosarium istilah C: ABI, alignment, argument, array, hingga linkage.
Buka →Bab 31 Lampiran
Pasang GCC, make, dan gdb di distribusi Linux populer.
Buka → # Setup WindowsPasang MinGW-w64 atau MSVC untuk kompilasi C di Windows.
Buka → # Setup macOSPasang Xcode Command Line Tools untuk compiler Clang di macOS.
Buka → # Setup WSLKonfigurasi Windows Subsystem for Linux untuk pengembangan C.
Buka → # Setup VS CodeKonfigurasi Visual Studio Code dengan ekstensi C/C++ untuk pengembangan C.
Buka → # Setup CLionKonfigurasi JetBrains CLion sebagai IDE C/C++ dengan toolchain yang dipilih.
Buka → # Setup GDBKonfigurasi gdb dengan .gdbinit: pretty printer, layout, dan command kustom.
Buka → # Setup ValgrindPasang dan gunakan valgrind untuk deteksi memory leak dan error akses memori.
Buka → # Setup Address SanitizerAktifkan ASan dan UBSan di GCC/Clang untuk deteksi bug memori otomatis.
Buka → # Setup CMakePasang CMake dan buat proyek C pertama dengan struktur multi-file.
Buka → # Setup GitInisialisasi repository Git untuk proyek C dengan .gitignore yang tepat.
Buka → # Referensi Standar CTautan ke dokumen standar ISO/IEC 9899 resmi dan draft gratis yang tersedia.
Buka → # Sumber Belajar LanjutanDaftar buku, kursus, dan komunitas untuk belajar C lebih lanjut.
Buka → # Glossary TeknisGlosarium istilah teknis pemrograman sistem dalam Bahasa Indonesia.
Buka →