C ekstensi dan portabilitas antar kompiler alternatif
Judul asli: C extensions, portability, and alternative compilers
Mengapa Ini Penting
Menunjukkan hambatan ekosistem untuk kompiler C alternatif di luar mainstream
Pengembang kompiler C menghadapi tantangan kompatibilitas dengan glibc dan header sistem. Header glibc menggunakan pemeriksaan khusus untuk GCC, clang, dan tcc yang dapat memblokir kompiler lain dari mengakses fungsi dasar seperti stdio.h.
Sebagian besar kode C nyata mengandalkan perilaku non-standar dan ekstensi bahasa untuk mengatasi bug dan celah di berbagai kompiler. Glibc mencoba mempertahankan kompatibilitas header pada kompiler non-GCC melalui sys/cdefs.h, namun implementasinya sering bermasalah. Contohnya, struct epoll_event menggunakan __attribute__((packed)) yang mengubah layout struct pada 64-bit. Header sys/cdefs.h memiliki kode yang mengabaikan __attribute__ jika bukan GCC, clang, atau tcc. Header builtin seperti stddef.h dan limits.h seharusnya disediakan kompiler, namun POSIX membutuhkan konstanta tambahan yang platform-spesifik. Glibc's limits.h menggunakan #include_next yang hanya berfungsi dengan GCC versi 2 atau lebih tinggi.