Ini adalah daftar tidak lengkap mengenai ketidaksesuaian antara C seperti yang tertulis dalam standar dan C seperti yang ada dalam praktik bagi pengguna gcc atau clang dengan glibc atau musl.
Secara default, gcc dan clang mengenali kata kunci asm sebagai ekstensi. Dalam C standar, asm adalah pengenal yang valid dan tidak dicadangkan, sehingga kode yang sesuai dengan standar mungkin gagal dikompilasi dengan pengaturan default. Kompilator tidak sepenuhnya sesuai secara default, dan standar dapat menjadikan asm sebagai kata cadangan seperti di C++, namun hal itu belum dilakukan.
Standar mewajibkan FLT_ROUNDS mencerminkan perubahan mode pembulatan saat runtime yang dilakukan melalui fesetround di <fenv.h>. Namun, gcc selalu mendefinisikan FLT_ROUNDS sebagai 1 (membulatkan ke yang terdekat), terlepas dari mode pembulatan saat runtime. Clang menyediakan builtin, __builtin_flt_rounds(), tetapi gcc tidak.
Standar C menetapkan pragma floating-point, yang ditambahkan di C99 dan C23, untuk mengendalikan perilaku aritmetika. Lebih dari 27 tahun sejak C99, gcc masih mengabaikan semuanya sebagai no-op, dan clang hanya mendukung pragma C99. Sebagian fungsionalitas dapat direplikasi dengan flag baris perintah, tetapi flag tersebut berlaku untuk seluruh translation unit, bukan untuk fungsi atau blok tertentu.
Standar mewajibkan kualifier pada tipe kembalian fungsi dibuang. Clang, sebaliknya, menganggapnya bermakna, sehingga mendeklarasikan int f(); dan const int f(); bersama-sama menghasilkan galat tipe yang bertentangan, padahal kedua deklarasi tersebut seharusnya identik.
Sumber: Hacker News · Diringkas oleh HeadlinesBriefing