C (programlama dili)
Sınırlamalar

the power of assembly language and the convenience of ... assembly language
Dennis Ritchie
C popüler, etkili ve son derece başarılı olmasına rağmen, aşağıdakiler de dahil olmak üzere dezavantajları vardır:
malloc ve free ile standart dinamik bellek işleme hataya açıktır. Hatalar şunları içerir: Bellek ayrıldığında ancak serbest bırakılmadığında bellek sızdırıyor; ve önceden boşaltılan belleğe erişim.
İşaretçilerin kullanımı ve belleğin doğrudan manipülasyonu, belki de programcı hatası veya yetersiz veri denetimi nedeniyle belleğin bozulmasının mümkün olduğu anlamına gelir.
Bazı tip kontrolü vardır, ancak değişken fonksiyonlar gibi alanlar için geçerli değildir ve tip kontrolü önemsiz veya yanlışlıkla atlanabilir.
Yüksek seviyeli programlama dillerinde yaygın olarak bulunan string değişken tipi C'de bulunmadığı için bunun yerine char ile belirli bir uzunlukta karakter dizisi array şeklinde hafızada tutulur. Mesela char a[]="Merhaba"; şeklinde bir karakter dizisi tanımlanabilir. Fakat daha sonra bu değişkene a[]="Nasılsın?"; şeklinde direkt olarak yeni bir değer atanamaz. Bunun yerine strcpy fonksiyonu kullanılabilir. Bu da diğer programlama dillerine nazaran C'nin zorluklarından biridir.
Derleyici tarafından üretilen kodun kendisi birkaç kontrol içerdiğinden, programcının tüm olası sonuçları göz önünde bulundurması ve arabellek taşmalarına, dizi sınırları denetimine, yığın taşmalarına, bellek tükenmesine, tür koşullarına, dizi yalıtımına vb. karşı koruma yükü vardır.
İşaretçilerin kullanımı ve bu araçların çalışma zamanı manipülasyonu, derleme zamanında belirlenemeyen aynı verilere (aliasing) erişmenin iki yolu olabilir. Bu, diğer dillerde mevcut olabilecek bazı optimizasyonların C'de mümkün olmadığı anlamına gelir. FORTRAN daha hızlı kabul edilir.
Standart kitaplık işlevlerinden bazıları, örn. scanf, arabellek taşmalarına neden olabilir.
Oluşturulan kodda düşük seviyeli değişkenler için sınırlı standartlaştırma desteği vardır, örneğin: farklı işlev çağırma kuralları ve ABI; farklı yapı paketleme kuralları; daha büyük tam sayılar içinde farklı bayt sıralaması (endianness dahil). Pek çok dil uygulamasında, bu seçeneklerden bazıları önişlemci yönergesi#pragma  aile, bazıları ise ek anahtar sözcüklerle ör. __cdeclçağrı kuralını kullanın. Ancak yönerge ve seçenekler tutarlı bir şekilde desteklenmemektedir.
Standart kitaplığı kullanarak dize işleme, kod açısından yoğundur ve açık bellek yönetimi gerekir.
Dil, nesne yönelimini, introspection, çalışma zamanı ifadesi değerlendirmesini, jenerikleri vb. doğrudan desteklemez.
Dil özelliklerinin uygunsuz kullanımına karşı sürdürülemez kodlara yol açabilecek birkaç koruma vardır. Zor kod için bu tesis, International Obfuscated C Code Contest ve Underhanded C Contest. gibi yarışmalarla kutlandı.
C, istisna işleme için standart destekten yoksundur ve yalnızca hata denetimi için dönüş kodları sunar. setjmp velongjmp standart kitaplık işlevleri [53]'te makrolar aracılığıyla bir try-catch mekanizmasını uygulamak için kullanılmıştır.
Bazı amaçlar için, kısıtlı C stilleri benimsenmiştir. Örneğin. MISRA C veya CERT C, hata olasılığını azaltmak amacıyla. CWE gibi veritabanları, C vb.'nin güvenlik açıklarına sahip olma yollarını ve azaltma önerilerini saymaya çalışır.
Bazı dezavantajlara karşı hafifletebilecek araçlar var. Çağdaş C derleyicileri, birçok olası hatayı belirlemeye yardımcı olmak için uyarılar oluşturabilen kontroller içerir.
Bu dezavantajlardan bazıları, diğer dillerin oluşturulmasına yol açmıştır.