C programlama dili, ortaya çıktığında düşük bir dil olarak mı kabul edildi?


151

Şu anda C düşük seviye bir dil olarak kabul edilir , ancak 70'lerde geri düşük seviye olarak mı kabul edildi? Terim daha sonra kullanımda bile miydi?

Birçok popüler üst seviye dil 80'lerin ortalarına kadar yoktu ve bu yüzden düşük seviyenin doğasının yıllar içinde nasıl değişip değişmediğini merak ediyorum.


13
Bir veri noktası olarak, 1978 dolaylarında bazı programlama danışmanları bana C'yi yüceltilmiş bir meclis dili olarak tanımladılar.
Ben Crowell

7
@BenCrowell İfadeniz bağlamında “yüceltilmiş” ifadenin ne anlama geldiğinden emin değilim, ancak C'yi evrensel (= platformdan bağımsız) bir derleme dili olarak adlandırıyorum .
Melebius

13
İlginçtir ki, C'nin Düşük Seviye Dil Değil Olduğu ve 70'lerde olduğundan daha az olduğu bir durum var, çünkü C'nin soyut makinesi modern donanımdan PDP-11'den daha uzakta kaldırılıyor.
Tom,

5
Bunu düşünürken kökenini de düşünmek isteyebilirsiniz - Unix C dilinde yazılmıştır, c Unix üzerinde çalışmakta ve unix'i diğer platformlara çapraz derlemektedir. Unix'i derlemek için gerekli olmayan her şey gereksiz bir yük oldu ve C'nin asıl amacı, bir derleyiciyi olabildiğince yazmayı / yerleştirmeyi kolaylaştırmaktı. Bu amaç için bu tam doğru seviyeydi, bu yüzden C'yi yüksek ya da düşük seviye olarak düşünmüyorum, onu neredeyse tüm Unix araçları gibi birçok soruna son derece uyarlanabilir bir Unix limanı aracı olarak düşünüyorum.
Bill K,

4
Lisp’in 1958’de
Başbakan

Yanıtlar:


144

Sorunun tarihi yönlerine cevap vermek için:

Tasarım felsefesi, Brian Kernighan ve C tasarımcısı Dennis Ritchie tarafından yazılan C Programlama Dili , duymuş olabileceğiniz "K&R" de açıklanmıştır. İlk baskının önsözü diyor

C "çok yüksek" bir dil değil, "büyük" bir dil de değil.

ve giriş diyor ki

C göreceli olarak "düşük seviye" bir dildir ... C, karakter dizeleri, kümeler, listeler veya diziler gibi bileşik nesnelerle doğrudan ilgilenmek için işlem yapmaz. Dizi veya dizgenin tamamını işleyen hiçbir işlem yok ...

Metin devam etmeden önce liste bir süre devam eder:

Bu özelliklerin bazılarının yokluğu ciddi bir eksiklik gibi görünse de, dili mütevazı bir boyuta indirmenin gerçek faydaları var.

(Yalnızca 1988’den ikinci basıma sahibim, ancak aşağıdaki yorum alıntılanan metnin 1978’nin ilk baskısında aynı olduğunu gösteriyor.)

Yani, evet, "yüksek seviye" ve "düşük seviye" terimleri o zamanlar kullanılıyordu, ancak C, aradaki spektrumda bir yere düşmek üzere tasarlanmıştı. Donanım platformları arasında taşınabilir olan C'ye kod yazmak mümkündü ve bu da bir dilin o zamanlar yüksek seviyede sayılıp kabul edilmediğinin temel kriterleriydi. Bununla birlikte, C, yüksek seviyeli dillerin özelliği olan bazı özelliklerden yoksundu ve bu basitlik lehine bir tasarım kararıydı.


42
Bu mükemmel bir cevap! Doğrulanabilir tarihsel kanıt + bir aktörün ifadesi, OP'nin atıfta bulunduğu dönemdeki düşük ve yüksek seviyelerin anlamı hakkında en iyi bilgilendirilmiş. Bu arada, fiyat tekliflerinin 1978 baskısında olduğunu onaylıyorum.
Christophe

157

Bu, yüksek ve düşük seviyeli dil tanımınıza bağlıdır. C geliştirildiğinde, meclisten daha yüksek seviyedeki herhangi bir şey, üst seviye bir dil olarak kabul edildi. Bu temizlemek için düşük bir çubuktur. Daha sonra, bu terminoloji, bazılarının bugünlerde Java'yı bile düşük seviyeli bir dil olarak kabul edeceği noktaya kaydırdı.

70'lerin üst düzey dil manzarası içinde bile, C'nin oldukça düşük seviyede olduğuna dikkat çekmek önemlidir. C dili temelde B artı basit bir tip sistemdir ve B, montaj için uygun bir prosedürel / yapılandırılmış sözdizimi katmanından çok daha fazla değildir. Yazım sistemi, yazılmamış B diline en üst düzeyde oturduğundan, bazı yerlerde hala yazım açıklamalarını bırakabilirsiniz ve intkabul edilecektir.

C bilinçli olarak, o zamanlar zaten iyi belirlenmiş olan özelliklerin uygulanması gibi pahalı ya da zor

  • otomatik hafıza yönetimi
  • iç içe işlevler veya kapanışlar
  • temel OOP veya coroutines
  • daha etkileyici tip sistemler (örn. menzil kısıtlı tipler, kayıt tipleri gibi kullanıcı tanımlı tipler, güçlü tipleme,…)

C bazı ilginç özelliklere sahip:

  • özyinelemeye destek (tüm değişkenlerin global ömre sahip olduğu dillerle karşılaştırıldığında, yığın tabanlı otomatik değişkenlerin bir sonucu olarak)
  • işaretçiler
  • Kullanıcı tanımlı veri tipleri (yapılar ve sendikalar) C'nin ilk sürümünden kısa bir süre sonra uygulandı.
  • C'nin string gösterimi (pointer-to-chars) aslında B üzerinde çok sayıda harfi tek bir makine kelimesine kodlayan büyük bir gelişmedir.
  • C'nin başlık dosyaları derleme birimlerini küçük tutmak için bir verimlilik hacküydü, ancak aynı zamanda basit bir modül sistemi sağlıyordu.
  • Montaj tarzı, sınırsız işaretçiler ve daha güvenli referanslarla karşılaştırıldığında işaretçi aritmetik. İşaretçiler doğal olarak güvensiz bir özelliktir ancak aynı zamanda düşük seviyeli programlama için çok kullanışlıdır.

C'nin geliştirildiği sırada, COBOL, Lisp, ALGOL (çeşitli lehçelerde), PL / I, SNOBOL, Simula ve Pascal gibi diğer yenilikçi diller çoktan yayınlanmış ve / veya belirli problem alanlarında geniş kullanım alanı içindeydi. Ancak, mevcut dillerin çoğu ana bilgisayar programlaması için tasarlandı veya akademik araştırma projeleriydi. Örneğin, ALGOL-60 ilk kez evrensel bir programlama dili olarak tasarlandığında, bunu yapmak için gerekli teknoloji ve bilgisayar bilimi henüz mevcut değildi. Bunlardan bazıları (bazı ALGOL lehçeleri, PL / I, Pascal) ayrıca düşük seviyeli programlama için tasarlanmıştır, ancak daha karmaşık derleyicilere sahip olma eğilimindeydiler veya çok güvenliydiler (örneğin sınırsız işaretçiler yok). Pascal, özellikle değişken uzunluktaki diziler için iyi bir desteğe sahip değildir.

Bu dillerle karşılaştırıldığında C, düşük seviyeli gelişim için daha pratik olması için “zarif” ve pahalı özellikleri reddetmektedir. C asla öncelikli olarak bir dil tasarımı araştırma projesi değildi. Bunun yerine, karşılaştırmalı olarak kaynak kısıtlı olan PDP-11 minibilgisayarındaki Unix çekirdeği gelişiminin bir sonucuydu. Nişi için (Unix'i bağlantı noktası kolay olan tek geçişli bir derleyiciyle yazmak için minimalist, düşük seviyeli bir dil) kesinlikle mükemmel - ve 45 yıldan sonra hala sistem programlamanın dilbilgisi .


17
Mevcut ALGOL ailesi ve Pascal dilleri için neyin gerekli olduğunun farkında olmayan insanlar için sadece küçük bir eklenti: Bu dillerin, dış işlevlerde bildirilen (yerel) değişkenlere erişebileceğiniz sözcüksel olarak iç içe geçmiş işlevleri vardı. Bu, ya her bir işlev çağrısı ve geri dönüşünde (sözcük seviyesini değiştiren) dış sözcüksel kapsamlar için bir işaretçi dizisi - ya da sözdizimsel kapsamları yığına ve bu değişken değişken erişimine zincirlemeniz gerektiği anlamına geliyordu. gerekli çoklu dolaylı onu bulmak için yığını atlıyor. Pahalı! C hepsini attı. Hala özlüyorum.
davidbak

12
@davidbak: x86-64 System V ABI (diğer bir deyişle Linux / OS X'teki çağrı sözleşmesi) %r10, tam olarak neden bahsettiğiniz "statik zincir işaretçisi" olarak tanımlanır. C için bu sadece başka bir çağrı-clobeded scratch register, ama sanırım Pascal bunu kullanır. (GNU C iç içe geçmiş işlevler, böyle bir işlev satır içi olmadığında bir işaretçiyi dış etki alanına aktarmak için kullanır (örneğin, bir işlev işaretçisi yaparsanız, derleyici yığında makine kodu trambolini oluşturur): Düzenli kabul edilebilirlik r10 ve r11 kullanımı )
Peter Cordes

2
@PeterCordes Büyüleyici! Sistem V çıktığında Pascal hala yaygın olarak kullanılıyordu (resmi SysV ABI'nin ne zaman tanımlandığını bilmeme rağmen). Bağlantılı cevabınız çok bilgilendirici.
davidbak

3
C kullanıcı tanımlı tiplere sahiptir (struct / union). Bu "özelliklerin" geri kalanı bırakıldı, şüpheliyim, çünkü sıfır veya olumsuz kullanımdalar (gizlenmiş bir kod yarışmasına girmediğiniz sürece :-)), dili hem basit hem de anlamlı kılma hedefinden saptadıkları için .
jamesqf

6
@jamesqf: ama çok erken saatlerde C'nin yapısal ataması yoktu; Sanırım a = b;ISO C89’da yapabildiğiniz şekilde bütün bir yapıyı kopyalamak yerine, üyeleri tek tek yazmalı veya kopyalamalısınız . Bu nedenle ilk C'de, kullanıcı tanımlı türler kesinlikle ikinci sınıftı ve yalnızca işlev argümanları olarak referansla geçilebiliyordu. C'nin dizilere karşı isteksizliği ve ayrıca C ++ neden yapıların içinde üyelere diziliş atamasını destekliyor, ancak genel olarak değil?
Peter Cordes

37

1970'lerin başlarında, C, modern yapıları kullanan göz kamaştırıcı bir temiz hava nefesiydi, böylece UNIX sisteminin tamamı, derleme dilinden C'ye ihmal edilebilir alan veya performans cezası ile yeniden yazılabilirdi. O sırada pek çok çağdaş ona yüksek seviye bir dil olarak atıfta bulundu.

Başta Dennis Ritchie olmak üzere C'nin yazarları daha açık sözlüydü ve Bell Sistem Teknik Dergisi makalesinde “C çok üst düzey bir dil değil” dedi. Akıllı bir gülümsemeyle ve kışkırtıcı olmaya istekli olan Dennis Ritchie, bunun düşük seviyeli bir dil olduğunu söylerdi. C'nin tasarım hedefleri arasında, dili makineye yakın tutmak, ancak taşınabilirliği sağlamak, yani makine bağımsızlığını sağlamaktı.

Daha fazla bilgi için orijinal BSTJ makalesine bakın:

Teşekkürler Dennis. Huzur içinde yatsın.


3
Bana sorarsanız, PDP montajı için temelde yazılmış ve daha iyi sözdizimi sarmalayıcıları vardı.
einpoklum


2
@ einpoklum Buna katılıyorum. 1980’de C’yi üniversitede, PDP-11 / 34a’da olduğu gibi öğrenmiştim. Muhtemelen PDP-11'e ek olarak, laboratuvarda üzerinde C derleyicileri bulunan birkaç Superbrain CP / M makinemiz vardı. en.wikipedia.org/wiki/Intertec_Superbrain
dgnuff

2
Ayrıca doğrulanabilir tarihsel kanıtlara dayanan mükemmel bir cevap (vay! Orada K & R'nin bir ön sürümü vardı!).
Christophe

7
@ einpoklum Bu biraz uzakta değil mi? 80'li yılların ortalarında assembler (Z80 ve M68K), M adında bir "taşınabilir assembler", soyut 16 bit yazıcılı ve komut setiyle PDP11 sözdizimi ve C olarak adlandırılan sistem ve uygulama kodunu yazma fırsatım oldu. , C kesinlikle yüksek düzeyde bir dildir: C programlamanın üretkenliği assembler'den daha büyük bir emirdir! Elbette karakter dizisi (SNOBOL), yerel veri dosyası desteği (COBOL), kendi kendini üreten kod (LISP), gelişmiş matematik (APL), nesne yok (SIMULA), yani çok yüksek olmadığı konusunda hemfikir değiliz
Christophe

21

Bu sitede başka bir yerde yazdığım gibi, birisi malloc / boş bellek yönetimi düzenine "düşük seviye programlama" olarak atıfta bulundu.

“Düşük seviye” tanımının zaman içinde nasıl değiştiği komik. Programlamayı ilk öğrendiğimde, basit bir tahsisat / serbest modeli mümkün kılan standartlaştırılmış bir yığın modeli sağlayan herhangi bir dilin gerçekten üst düzey olduğu kabul edildi. In düşük seviyeli programlama, bellek kendiniz takip etmek zorunda (değil tahsisleri, ancak bellek konumları kendileri!), Ya da gerçekten fantezi duygu olsaydı kendi yığın allocator yazmak istiyorum.

Bağlam için bu 90'lı yılların başındaydı, C ortaya çıktıktan sonra.


Standart kütüphane sadece 80'li yılların sonundaki standardizasyondan beri bir şey değil miydi (mevcut Unix API'lerine dayanarak)? Ayrıca, Çekirdek programlama (C'nin orijinal problem alanıydı) doğal olarak manuel bellek yönetimi gibi düşük seviyeli şeyler gerektirir. C zamanında, ciddi bir çekirdeğin yazıldığı en üst seviye programlama dili olmalı (bugünlerde NT çekirdeğinin de adil miktarda C ++ kullandığını düşünüyorum).
amon

6
@hyde, Algol 60'ı, iki farklı FORTRAN lehçesini ve 1970'lerde birkaç farklı BASIC lehçesini kullandım ve bu dillerin hiçbirinde işaretçi ya da yığın ayırıcısı yoktu.
Süleyman Yavaş

7
Kesin konuşursak, malloc()doğrudan arayarak brk(2)ya mmap(2)da elde edilen belleği kendiniz yöneterek hayır programlayabilirsiniz . Bu, akla gelebilecek bir yararı olmayan büyük bir PITA'dır ( mallok benzeri bir şey uygulamadığınız sürece ), ancak yapabilirsiniz.
Kevin

1
@amon - ALGOL'de aşağıdan yukarıya doğru programlanmış, dikkat çekici Burroughs yığın tabanlı makineler dışında ... ve Unix'ten çok daha erken. Oh, ve bu arada, Unix'in ilham kaynağı olan Multics: PL / I ile yazılmış.
ALGOL'a

6
Aslında, bugün çoğumuzun Multics'i kullanmamamızın nedeni, muhtemelen sadece cehennemce pahalı olan ana makinelere (yani, günün tipik çirkin ana bilgisayar masrafına ek olarak bir yarım dolabın ekstra masrafına dayanıyor olması) ilgisi var. sanal belleği güvenlikle uygulamak için özel donanım. VAX-11 gibi 32-bitlik mini bilgisayarlar, bankalar ve hükümet dışındaki herkes çıktığında IBM ve Yedi Cücelerden vazgeçip büyük ölçekli işlemlerini "mini" bilgisayarlara götürdü.
davidbak

15

Pek çok cevap, “C yüksek seviye bir dil değildir” diyen ilk makalelere çoktan değinmiştir.

Ancak, istiflenmeye dayanamıyorum: çoğu, o sırada çoğu HLL'ler olmasa da - Algol, Algol-60, PL / 1, Pascal - dizi dizileri sınırlarını denetleme ve sayısal taşma algılama.

En son kontrol ettiğim arabellek ve tamsayı taşmaları birçok güvenlik açığının temel nedeni idi. ... Evet, hala durum ...

Dinamik bellek yönetimi için durum daha karmaşıktı, ancak yine de, C tarzı malloc / ücretsiz güvenlik açısından geriye doğru atılmış büyük bir adımdı.

Öyleyse eğer HLL tanımınız “otomatik olarak birçok düşük seviye böceği önler” ibaresini içeriyorsa, peki, siber güvenliğin durumu C ve UNIX olmasaydı muhtemelen çok daha farklı olurdu.


7
Intel MPX'in uygulanmasında yer aldığım ve bu durumdan çıkan işaretçi / sınır kontrol derleyicisine dahil olduğum için, performansları hakkında yazılara başvurabilirim:% 5-15. Bunların çoğu, 1970'lerde ve 1980'lerde zorlukla mümkün olan derleyici analizlerini içerir -% 50 daha yavaş olabilecek naif çeklerle karşılaştırıldığında. Ancak, C ve UNIX'in bu gibi analizler üzerinde 20 yıl öncesine kadar çalışmalarını sürdürdüğünü söylemenin adil olduğunu düşünüyorum - C en popüler programlama dili olduğunda, güvenlik için çok daha az talep vardı.
Krazy Glew

9
@jamesqf Ayrıca, C'den önceki birçok makinenin sınır kontrolü ve tamsayı taşması için özel donanım desteği vardı. C bu HW'yi kullanmadığından, sonuçta kullanımdan kaldırıldı ve kaldırıldı.
Krazy Glew

5
@jamesqf Örneğin: MIPS RISC ISA başlangıçta Pascal'da yazılmış olan Stanford kriterlerine dayanıyordu, ancak daha sonra C'ye taşındı. 2010 dolaylarında MIPS'de çalışıyordum, patronum MIPSr6'daki kullanılmayan talimatları kaldırmak istedi ve çalışmalar taşma kontrollerinin neredeyse hiç kullanılmadığını gösterdi. Ancak Javascript'in böyle kontroller yaptığı ortaya çıktı - ancak işletim sistemi desteği olmadığı için ucuz talimatları kullanamadı.
Krazy Glew

3
@KrazyGlew - Bunu, C / C ++ 'da, kullanıcılar ve derleyici yazarlar arasındaki "tanımsız davranış" konusundaki mücadelenin imzalı tamsayı taşması nedeniyle ısınması nedeniyle çok ilginç, bugünün derleyici yazarlarının eski mantrayı "yanlış yaptığı için kötü Program hiçbir günah" ve stackoverflow mesajların 11. Plenty için o kadar açık ve başka bir yerde bu yansıtacak ...
davidbak

2
Rust, SIMD'nin C gibi içsel özelliklerine sahipse, neredeyse ideal bir modern taşınabilir montaj dili olabilir. C, agresif UB tabanlı optimizasyon nedeniyle taşınabilir bir derleme dili olarak daha da kötüleşiyor ve modern CPU'ların desteklediği (popcnt, öncü / izleyen sayıları, bit-ters, byte-ters, doygunluğu sayıyor) yeni ilkel işlemleri taşınabilir bir şekilde sergilemedi matematik). C derleyicilerinin HW destekli CPU'larda bunun için verimli bir şekilde yararlanmasını sağlamak çoğu zaman taşınabilir olmayan içseller gerektirir. O almak için deyim tanıma daha iyidir olmadan hedeflere derleyici taklit popcnt olması popcnt.
Peter Cordes

8

C'yi (1972) baslayan daha eski ve daha yüksek dilleri göz önünde bulundurun:

Fortran - 1957 (C'den çok yüksek değil)

Lisp - 1958

Cobol - 1959

Fortran IV - 1961 (C'den çok yüksek değil)

PL / 1 - 1964

APL - 1966

Ayrıca RPG (1959) gibi orta seviye bir dil, çoğunlukla panel tabanlı ünite kayıt sistemlerinin yerini alacak bir programlama dili.

Bu açıdan bakıldığında, C çok düşük seviyeli bir dil gibi gözüküyordu, sadece ana makinelerde kullanılan makro birleştiricilerin biraz üzerinde görünüyordu. IBM mainframe'leri durumunda, assembler makroları BDAM (veritabanı erişimi gibi) gibi veritabanı erişimi için kullanıldı, çünkü veritabanı arayüzleri Cobol'a (o sırada) taşınmamıştı. Cobol programları bugün IBM ana bilgisayarlarında kullanılıyor.


2
Daha eski, daha yüksek dilleri listelemek istiyorsanız LISP'i unutmayın .
Deduplicator

@Deduplicator - Listeye ekledim. IBM ana bilgisayarlarında ne kullanıldığına odaklanmıştım ve LISP'nin bu kadar popüler olduğunu hatırlamıyorum, ancak APL aynı zamanda IBM ana bilgisayarları (zaman paylaşım konsolları aracılığıyla) ve IBM 1130 için de niş bir dildi. Daha yüksek seviyeli diller, örneğin Conway'in yaşam tarzını APL'nin güncel bir sürümüyle yaratması için ne kadar az kod gerektiğine bakın: youtube.com/watch?v=a9xAKttWgP4 .
rcgldr

2
En azından COBOL-85'ten önce değil, RPG veya COBOL'u özellikle yüksek seviye olarak saymazdım. COBOL'un yüzeyini çizdiğiniz zaman, bunun esasen çok gelişmiş birleştirme makroları topluluğu olduğunu görüyorsunuz. Başlangıç ​​olarak, her türlü kapsamın yanı sıra hem işlevleri, prosedürleri hem de özyinelemeden yoksundur. Tüm depolama, programın en üstünde, uzun süren aşınmalar veya ağrılı değişken yeniden kullanımlara neden olacak şekilde ilan edilmelidir.
idrougge

Fortran IV'ü kullanmakla ilgili bazı kötü anılarım var, bunun C'den oldukça yüksek "seviye" olduğunu hatırlamıyorum
DaveG

@idrougge - COBOL ve RPG ve ayrıca anabilgisayar talimat setleri ABD gibi ülkelerde finansal yazılım için bir gereksinim olan paketlenmiş veya ambalajsız BCD için tam destek içeriyordu. İlgili hamleyi "hamle" gibi ilgili operatörlerin üst düzeyde olduğunu düşünüyorum. RPG, ham girdi alanları ile biçimlendirilmiş çıktı alanları ve / veya akümülatörler arasındaki bağlantıyı belirlemeniz alışılmadık bir durumdu, ancak değiştirilen klavyenin programlanmasına benzer şekilde işlem sırası değil.
rcgldr,

6

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.