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.

VersiTahunKodeHarga ISO (2024)
C901990ISO/IEC 9899:1990Withdrawn
C991999ISO/IEC 9899:1999Withdrawn
C112011ISO/IEC 9899:2011Withdrawn
C172018ISO/IEC 9899:2018CHF 198
C232024ISO/IEC 9899:2024CHF 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:

KlausaTopik
1Scope
2Normative references
3Terms, definitions, and symbols
4Conformance
5Environment
6Language
7Library

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.

text
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: #embed directive untuk embed binary ke source
  • N3047: constexpr for objects
  • N3066: nullptr constant
  • N3094: typeof operator
  • 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 #

SkenarioSumber
Cek signature fungsi librarycppreference.com
Cek apakah perilaku UBStandar Annex J.2 atau cppreference
Pahami sintaks declarationStandar klausa 6.7
Cek fitur baru C23N3096 atau cppreference bagian C23
Cek ekstensi GCCGCC manual C Extensions
Bug compiler (mungkin UB)Standar klausa terkait + DR
Pelajari history CStandar + DR + paper WG14