Standar resmi C adalah dokumen ISO/IEC 9899 yang diterbitkan oleh International Organization for Standardization. Dokumen ini menjadi rujukan otoritatif untuk setiap aspek bahasa C—sintaks, semantic, library standar, dan perilaku yang ditentukan. Bab ini menyusun tautan ke dokumen standar resmi, draft gratis yang hampir identik, serta sumber referensi sekunder yang dipercaya komunitas.
1. Standar Resmi ISO/IEC 9899 #
Standar C dirawat oleh komite ISO/IEC JTC1/SC22/WG14. Setiap versi standar diterbitkan sebagai dokumen ISO/IEC 9899 dengan tahun terbit.
| Versi | Tahun | Kode | Harga ISO (2024) |
|---|---|---|---|
| C90 | 1990 | ISO/IEC 9899:1990 | Withdrawn |
| C99 | 1999 | ISO/IEC 9899:1999 | Withdrawn |
| C11 | 2011 | ISO/IEC 9899:2011 | Withdrawn |
| C17 | 2018 | ISO/IEC 9899:2018 | CHF 198 |
| C23 | 2024 | ISO/IEC 9899:2024 | CHF 308 |
Beli dari https://www.iso.org/standard/74528.html (C17) atau https://www.iso.org/standard/82075.html (C23). Versi PDF adalah satu-satunya cara memperoleh dokumen final yang dijamin otoritatif.
2. Draft Gratis yang Tersedia #
WG14 menerbitkan draft publik yang hampir identik dengan versi final. Perbedaan biasanya hanya editorial—koreksi typo, formatting. Berikut sumber draft yang dapat kita pakai tanpa biaya:
N2764 (C17 Final Draft) #
URL: https://web.archive.org/web/20181230002224/http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf
Draft ini adalah Final Draft International Standard (FDIS) C17—secara teknis identik dengan ISO/IEC 9899:2018. Cocok untuk referensi akademik.
N3096 (C23 Working Draft) #
URL: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.pdf
Working draft C23 dari Maret 2023. Sangat dekat dengan versi final C23 yang diterbitkan Oktober 2024. Cukup akurat untuk pembelajaran.
N1570 (C11 Final Draft) #
URL: https://web.archive.org/web/20181230042214/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
FDIS C11—identik teknis dengan ISO/IEC 9899:2011. Sering dirujuk dalam literatur akademik.
N1256 (C99 + TC3) #
URL: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
C99 dengan Technical Corrigendum 1, 2, 3. Paling lengkap untuk referensi C99.
C90 Draft #
URL: https://web.archive.org/web/20191210102145/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n894.ps
Draft awal C90. Sebagian besar kode legacy Unix mengacu versi ini.
3. Struktur Dokumen Standar #
Standar C terdiri dari tujuh klausa utama:
| Klausa | Topik |
|---|---|
| 1 | Scope |
| 2 | Normative references |
| 3 | Terms, definitions, and symbols |
| 4 | Conformance |
| 5 | Environment |
| 6 | Language |
| 7 | Library |
Klausa 6 (Language) menjelaskan sintaks C: lexing, preprocessing, tipe, expression, declaration, statement. Klausa 7 (Library) menjelaskan standard library—<stdio.h>, <stdlib.h>, <string.h>, dan seterusnya.
Klausa tambahan:
- Annex A — Language syntax summary
- Annex B — Library summary
- Annex C — Sequence points
- Annex D — Universal character names
- Annex E — Implementation limits
- Annex F — IEC 60559 floating-point arithmetic
- Annex G — IEC 60559 compatible complex arithmetic
- Annex H — Locale-specific behavior
- Annex I — Common warnings
- Annex J — Portability issues (daftar UB, implementation-defined, locale-specific)
- Annex K — Bounds-checking interface (opsional, Annex K library)
- Annex L — Analyzability
- Annex M — Extended integer types
- Annex N — Wide-character support
4. Membaca Standar: Contoh Annex J #
Annex J adalah daftar lengkap undefined behavior, implementation-defined behavior, dan locale-specific behavior. Saat kita menemukan perilaku aneh di C, Annex J adalah tempat pertama mencari.
J.2 Undefined behavior
The behavior is undefined in the following circumstances:
— A 'shall' or 'shall not' requirement is violated and appears outside a
constraint (4.2).
— A non-empty source file does not end in a new-line character...
— A token cannot be formed...
— An identifier, object, function, ... has reserved name...
— Conversion to or from an integer type produces a value that cannot be
represented in the type (6.3.1.4).
— ...Daftar di Annex J cukup panjang—lebih dari 200 item untuk UB saja. Standar tidak memberi contoh kode, hanya referensi ke klausa utama.
5. Referensi Sekunder #
Untuk pembelajaran sehari-hari, dokumen standar sulit dibaca karena gaya formal. Referensi sekunder berikut lebih mudah dipahami:
cppreference.com #
URL: https://en.cppreference.com/w/c
Wiki referensi C yang dikelola komunitas. Setiap fungsi library memiliki halaman dengan signature, parameter, return value, contoh kode, dan catatan portabilitas. Diperbarui untuk C23.
GCC Manual #
URL: https://gcc.gnu.org/onlinedocs/
Dokumentasi resmi GCC. Bab utama yang sering dirujuk:
- C Dialect Options:
https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html - Warning Options:
https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html - Optimize Options:
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html - C Extensions:
https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html
Clang Manual #
URL: https://clang.llvm.org/docs/
Dokumentasi Clang. Bab utama:
- UsersManual:
https://clang.llvm.org/docs/UsersManual.html - LanguageExtensions:
https://clang.llvm.org/docs/LanguageExtensions.html - AttributeReference:
https://clang.llvm.org/docs/AttributeReference.html - ThreadSanitizer:
https://clang.llvm.org/docs/ThreadSanitizer.html
GDB Manual #
URL: https://sourceware.org/gdb/current/onlinedocs/gdb.html
Dokumentasi resmi GDB. Lengkap dengan contoh dan referensi perintah.
CMake Documentation #
URL: https://cmake.org/cmake/help/latest/
Dokumentasi resmi CMake. Bab utama:
- cmake-variables:
https://cmake.org/cmake/help/latest/manual/cmake-variables.7.html - cmake-commands:
https://cmake.org/cmake/help/latest/manual/cmake-commands.7.html - cmake-properties:
https://cmake.org/cmake/help/latest/manual/cmake-properties.7.html
6. Defect Reports (DR) #
WG14 menerima laporan bug dari publik untuk standar. Defect Reports dipublikasikan di:
URL: https://www.open-std.org/jtc1/sc22/wg14/www/docs/summary.htm
Setiap DR memiliki nomor, status (Drafting, Complete, Closed), dan dokumentasi resolusi. DR yang sudah “Complete” biasanya dimasukkan ke Technical Corrigendum atau standar berikutnya.
Contoh: DR 463 membahas apakah realloc(ptr, 0) bebas memori atau tidak. Resolusi: behavior diubah di C23—realloc(ptr, 0) sekarang implementation-defined, bukan standar de-facto.
7. Proposal dan Working Draft #
WG14 mengembangkan standar berikutnya melalui proposal bernomor (N####). Semua proposal dipublikasikan di:
URL: https://www.open-std.org/jtc1/sc22/wg14/www/documents
Contoh proposal terkenal:
- N3007:
#embeddirective untuk embed binary ke source - N3047:
constexprfor objects - N3066:
nullptrconstant - N3094:
typeofoperator - N3108: Bit-precise integer types
_BitInt(N)
Mengikuti proposal memberi kita gambaran arah perkembangan bahasa C—berguna bila kita menulis library yang harus tetap relevan.
8. Strategi Menggunakan Standar #
| Skenario | Sumber |
|---|---|
| Cek signature fungsi library | cppreference.com |
| Cek apakah perilaku UB | Standar Annex J.2 atau cppreference |
| Pahami sintaks declaration | Standar klausa 6.7 |
| Cek fitur baru C23 | N3096 atau cppreference bagian C23 |
| Cek ekstensi GCC | GCC manual C Extensions |
| Bug compiler (mungkin UB) | Standar klausa terkait + DR |
| Pelajari history C | Standar + DR + paper WG14 |