Sorunuzun cevabı, hangi C dilinden istediğine bağlıdır.
Dennis Ritchie'nin 1974 C Referans El Kitabında tarif edilen dil, üst seviye dillerin bazı programlama kolaylıklarını sunan düşük seviyeli bir dildi. Bu dilden türetilen lehçeler de aynı şekilde düşük seviyeli programlama dilleri olma eğilimindedir.
Ancak 1989/1990 C Standardı yayınlandığında, gerçek makinelerin programlanması için popüler olan düşük seviyeli dili tarif etmiyordu; bunun yerine, olması gereken - ancak olması gerekmeyen - daha yüksek seviyeli bir dili tanımladı alt seviye terimlerle uygulanmaktadır.
C Standardın yazarlarının da belirttiği gibi, dili faydalı kılan şeylerden biri birçok uygulamanın üst düzey montajcılar olarak değerlendirilebileceği idi. C aynı zamanda diğer yüksek seviyeli dillere alternatif olarak kullanıldığından ve birçok uygulamanın yüksek seviyeli dillerin yapamadığı şeyleri yapmasını gerektirmediğinden, Standart'ın yazarları uygulamaların keyfi bir şekilde davranmasına izin verdi. programlar düşük seviyeli yapılar kullanmaya çalıştıysa. Sonuç olarak, C Standardı tarafından tanımlanan dil hiçbir zaman düşük seviyeli bir programlama dili olmamıştır.
Bu ayrımı anlamak için, Ritchie'nin Dili ve C89'un kod pasajını nasıl göreceğini düşünün:
struct foo { int x,y; float z; } *p;
...
p[3].y+=1;
"char" 8 bit, "int" 16 bit büyük-endian, "float" 32 bit olan bir platformda ve yapıların özel dolgu veya hizalama gereksinimleri yoktur, bu nedenle "struct foo" boyutu 8 bayttır.
Ritchie'nin Dili'nde, son ifadenin davranışı "p" de depolanan adresi alır, 3 * 8 + 2 [yani 26] bayt ekler ve bu addaki ve sonraki baytlardan 16 bitlik bir değer alır. , bu değere bir tane ekleyin ve sonra bu 16 bitlik değeri aynı iki bayta geri yazın. Davranış, ne tür bir nesnenin orada saklandığına bakılmaksızın, p adresinde olanı izleyen 26. ve 27. baytlara etki etmek olarak tanımlanacaktır.
C Standardının tanımladığı dilde, * p'nin "ptt foo []" 'nun bir elemanını tanımlaması durumunda, ardından bu tipten en az üç tane daha tamamlanmış eleman varsa, son ifade y üyesine bir tane ekler. * p'den sonra üçüncü eleman. Davranış, Standart tarafından başka hiçbir koşulda tanımlanmayacaktır.
Ritchie'nin dili düşük seviyeli bir programlama diliydi çünkü bir programcının uygun olduğunda diziler ve yapılar gibi soyutlamaları kullanmasına izin verirken, davranışı bellekteki nesnelerin temelindeki düzen açısından tanımladı. Buna karşılık, C89 ve daha sonraki standartlar tarafından tanımlanan dil, şeyleri daha yüksek bir soyutlama açısından tanımlar ve sadece bununla tutarlı olan kod davranışını tanımlar. Düşük seviyeli programlamaya uygun kalite uygulamaları, Standartın gerektirdiğinden daha fazla durumda yararlı olacaktır, ancak bir uygulamanın bu amaçlara uygun olması için ne yapması gerektiğini belirten "resmi" bir belge yoktur.
Dennis Ritchie tarafından icat edilen C dili bu nedenle düşük seviyeli bir dildir ve bu şekilde tanınmıştır. Bununla birlikte, C Standartları Komitesi tarafından icat edilen dil, Standardın şartlarının ötesine geçen uygulama tarafından sağlanan teminatların yokluğunda hiçbir zaman düşük seviyeli bir dil olmamıştır.