Yaygın C derleyicileri ve kütüphaneleri C standardıyla çelişiyor
Öne çıkanlar
- GCC ve Clang varsayılan ayarlarda 'asm' sözcüğünü standart dışı biçimde anahtar kelime olarak işliyor.
- GCC, C99 standardında tanımlanan beş standart kayan nokta pragmasını 27 yıldır desteklemiyor.
- musl kütüphanesindeki stdarg.h başlığı, C23 standardının tek argümanlı va_start özelliğini engelliyor.
Yazılım geliştiricisi, GCC ve Clang derleyicileri ile glibc ve musl kütüphanelerinin C dili standardıyla örtüşmeyen davranışlarını listeledi. Paylaşılan teknik notlara göre, güncel araç zincirleri standart C belgelerinde yer alan çeşitli kuralları varsayılan ayarlarda uygulamıyor. Bu durum, teorik olarak standarda tam uyumlu yazılmış kaynak kodların pratikte derlenememesine veya beklenmeyen hatalar vermesine yol açıyor.
Derleyicilerin varsayılan davranışları incelendiğinde, GCC ve Clang'in 'asm' kelimesini bir anahtar sözcük eklentisi olarak tanıdığı görülüyor. Standart C dilinde ise 'asm' ayrılmış bir sözcük olmadığı için değişken ismi olarak kullanılabiliyor. Benzer şekilde, kayan nokta ortamındaki yuvarlama modunu gösteren FLT_ROUNDS makrosunun çalışma zamanında dinamik olarak değişmesi gerekirken GCC bu değeri sabit 1 olarak tanımlıyor. C99 ile gelen kayan nokta pragma kuralları da aradan 27 yılı aşkın süre geçmesine rağmen GCC tarafından işlenmiyor.
Farklılıklar yalnızca derleyicilerle sınırlı kalmayıp C standart kütüphanelerinde de kendini gösteriyor. POSIX standartları initstate işlevinin hata durumunda NULL döndürmesini zorunlu kılarken glibc kütüphanesi hata kodunu ayarlamasına rağmen NULL döndürmüyor. Benzer şekilde musl kütüphanesinin sağladığı stdarg.h başlığı, C23 standardında va_start makrosuna getirilen tek argümanlı kullanım desteğini geçersiz kılarak derleyicinin sunduğu güncel özelliklerin kullanımını engelliyor.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.