B.V. Kernighan, MD richie. dil ile. Bir kişi. Dennis Ritchie - C ve UNIX'in yaratıcısı

  • 28.06.2019

Dennis Ritchie, çok popüler bir programlama dili - "C" veya aynı zamanda adıyla - "C programlama dilinin babası" yaratan kişidir. Dennis, 9 Eylül 1941'de New York Bronxville'de doğdu. Babası Alistair Ritchie, Bell Labalatories'de sistem mühendisiydi.

Kısa bir süre sonra, Ritchie ve ailesi New Jersey'e taşındı, Zirve Lisesi'nden mezun oldu, ardından Harvard Üniversitesi'nden fizik ve matematik alanında 1963'te lisans ve ardından 1968'de matematik alanında doktora derecesi aldı.

Dennis, Unix çekirdeğine önemli bir katkıda bulunan ve Denis Ritchie'nin The C Programming Language kitabının ortak yazarıdır. Orijinal Unix'i yazan Ken Thomson ile çalıştı. Daha sonra Brian Kernighan ile birlikte C dili üzerinde çalıştı, bunlara K & R - Kernighan ve Ritchie de denildi. Denis, Unix'e büyük katkı yaptı. Özellikle Unix çeşitli platformlara taşındığından beri. Fikirleri, neredeyse tüm yeni programlama dillerinde ve her bilgi parçasında hala işletim sistemi tasarımının kalbinde yaşıyor.

Ritchie'nin kariyeri

Dennis Ritchie, kariyerine 1967'de bir bilgisayar araştırma merkezi olan Bell Laboratories'de başladı. Dünyanın en ünlü dijital inovasyon merkezlerinden biridir ve aynı zamanda transistörün doğum yeridir.

Alcatel-Lucent Bell Labs Başkanı John Kim şunları söyledi:

Dennis, Bell Labs'taki meslektaşlarına iyi davrandı ve onu çok özleyeceğiz. Hepimize gerçekten ilham verdi. Sadece birçok başarısı için değil, aynı zamanda bir arkadaş, mucit, alçakgönüllü ve tatlı bir insan olduğu için. Ritchie ailesine ve onunla herhangi bir şekilde bağlantısı olan herkese en derin taziyelerimizi sunarız.

Unix

Bell Labs'ta Ritchie, Multics projesi üzerinde çalıştı. Bu, toplu işleme ve etkileşim fikrini birleştirmesi beklenen işletim sistemiydi. Program kart yığınından başlatıldı ve programcı, operatör veya kullanıcının kendisi programın yürütülmesi üzerinde tam kontrole sahipti. Ardından Denis, daha sonra Ritchie'nin ana çalışanlarından biri olacak olan Ken Thomson ile tanıştı:

Multics'in ticari olarak başarılı olamamasının açık nedenlerinden biri, çok karmaşık olmasıydı. O çok fazlaydı - Dennis Ritchie

Bell Labs kısa süre sonra Multics üzerinde çalışmayı bıraktı, ancak Ritchie ve Ken, kullanıcı etkileşimi fikrinden vazgeçmemeye karar verdi ve halefi Unix üzerinde çalışmaya başladı. Artık modern bir işletim sistemidir ve dağıtımı 1973'te başlamıştır.

C programlama dili

Yetmişlerin bilgisayar platformlarının çeşitliliği, yazılım yaratıcılarının yaşamlarına kötü bir şekilde yansıdı. Yazılımlarını çeşitli yeni platformlar için oluşturmak için zaman ve enerji harcamaları ya da programlarını yalnızca tek bir platformda çalışacak şekilde sınırlamaları gerekiyordu.

Orijinal Unix çekirdeği derlemede yazılmıştır, ancak Ritchie ve Ken, tüm veriler ve işletim sistemi üzerinde daha fazla kontrol elde etmek için yüksek seviyeli bir dile ihtiyaç duyduklarına karar verdiler.

UNIX yazmak için BCPL (Temel Birleşik Programlama Dili) kullandılar, onu sekiz kilobayta sıkıştırdılar ve B olarak yeniden adlandırdılar.

Sonra Ritchie daha da ileri gitti ve C adında yeni bir programlama dili geliştirdi. Bu, veri türleri ve yeni sözdizimi ekleyerek B'nin bir yükseltmesiydi. B yorumlanmış bir dildi, yürütülmesi için işlemci ve dil talimatları arasında bir katmana ihtiyaç vardı, C derlenirken. Önce makine koduna çevrilir ve ardından doğrudan işlemci tarafından yürütülür.

UNIX basit bir işletim sistemidir, ancak sadeliğini anlamak için dahi olmalısınız. - Dennis Ritchie

C'de yazılan programlar kolayca ve hızlı bir şekilde C'nin çalışabileceği diğer platformlara taşınabilir. C'nin çok basit bir sözdizimi, birkaç talimatı ve modüler bir yapısı vardı. Bu nedenle farklı bilgisayarlarda kullanmak kolaydı. Her geliştiricinin her şeyi sıfırdan yazmak zorunda kalmadan kopyalayıp programlarına yapıştırabileceği devasa C kodu blokları vardı. Bu tür kod bloklarına kitaplıklar kullanılarak kolayca erişilebilir, böylece programcılar bunlara çok hızlı erişebilirdi.

Ritchie ve Ken, UNIX'i C olarak yeniden yazdı, bu ona taşınabilirlik sağladı ve ayrıca programcıların bir işletim sistemi, bir programlama dili ve küçük bir araç seti kullanmasını sağladı. Bu nedenle, Unix daha sonra bilgisayarlar arasında deney ve ağ oluşturma için bir işletim sistemi olarak yerini aldı.

"Açıkçası, kariyerim üzerinde en çok etkiye sahip olan kişi Ken Thompson." - Dennis Ritchie

1978'de Dennis Ritchie ve Brian Kenigan tarafından yazılan bir kitap yayınlandı - C Programlama Dili. Kitap, C diline kısa bir girişin yanı sıra çeşitli programlama teknikleri ve stillerini kapsar. Bu kitap, o zamandan beri birçok programcı için pratik bir rehber olmaya devam ediyor.

1980'lerin ortalarında C, dünyanın en popüler programlama dillerinden biri haline geldi. C'nin yazılım oluşturmak ve onu çeşitli platformlarda çalıştırmak için kolayca kullanılabileceği işlevsellik ve hız nedeniyle, birçok şirket ürünlerini geliştirmek için C'yi kullanmaya başladı.

C programlama dili, bugün hala uygulama sistemlerinin, işletim sistemlerinin oluşturulması ve gömülü sistemlerin geliştirilmesi için dünyadaki en popüler ikinci programlama dili olarak kullanılmaktadır. Etkisi birçok modern dilde hala görülebilir. Tıpkı UNIX gibi kavramlar artık hesaplama emirleri olarak kabul edilmektedir.

"Zaten birkaç farklı makine ve işletim sistemi için uygulandığından, UNIX zaten PDP-11'e yayılıyordu, ancak tüm sistemin taşınabilirliği tamamen yeniydi." - Denis Ritchie

Dennis Ritchie'nin Unix'e yaptığı son büyük katkı, cihazları, uygulamaları ve protokolleri bağlamak için kullanılan iş parçacığı mekanizmasıdır.

Windows, Mac, Linux ve ...

Çok sayıda uygulama C veya nesnel yönelimli C ++ neslinde yazılmıştır. C, ANSI ve ISO tarafından standartlaştırılmıştır çünkü günümüzde bilgi endüstrisinin neredeyse her yönü buna dayanmaktadır.

C ++ veya JavaScript, daha sonra C temelinde oluşturulan dillere örnek olarak gösterilebilir, ayrıca tarayıcılar C ile yazılmıştır. Microsoft Windows orijinal olarak C'de yazılmıştır ve her iki Apple işletim sistemi bile Unix tabanlıdır.

Dennis Ritchie'nin katkılarının bilgisayar endüstrisinin çekirdeğini önemli ölçüde değiştirdiğine şüphe yok.

C'nin sağladığı programlama stilinin giderek daha az kullanılması muhtemeldir. Ancak JavaScript ve XML giderek daha önemli hale gelmeye devam edecek. - Dennis Ritchie

Richty daha sonra Lucent Technologies'de Bilgisayar Sistemleri Araştırma Başkanı oldu ve 2007'de emekli olana kadar bilgisayarları kullanıcılar için daha kolay ve daha iyi hale getirmeye kararlıydı.

Ödüller

  • 1974'te Sistemler ve Diller Alanında Üstün Başarı ACM Ödülü.
  • 1982'de IEEE Emmanuel Piore Ödülü
  • 1984 Bell Labs Çalışan Ödülü
  • 1983 Turing Ödülü
  • 1983 ACM Yazılım Sistemleri Ödülü
  • Amerika Birleşik Devletleri Ulusal Mühendislik Akademisi tarafından 1963'te aday gösterildi
  • 1990'da IEEE Hamming Madalyası.
  • 1997 yılında Bilgisayar Tarihi Müzesi üyeliği.
  • ABD Ulusal Madalyası, Nisan 1999'da UNIX işletim sistemi ve C programlama dili konusundaki çalışmaları nedeniyle Başkan Bill Clinton'dan.
  • 2005 yılında bilim ve teknolojiye yaptığı değerli katkılardan dolayı Endüstriyel Araştırma Enstitüsü'nden ödül.
  • 2011 Japonya Bilgilendirme ve UNIX Geliştirme Ödülü.

Ken Thomson, Dennis Ritchie'nin aldığı tüm ödülleri de aldı.

Ritchie'nin Ölümü

Dennis, Berkeley Heights, New Jersey'deki evinde tek başına yaşıyordu. 12 Ekim 2011'de ölü bulundu. Nedeni ve kesin ölüm zamanı bilinmemektedir. Son birkaç yıldır, prostat kanseri ve kardiyovasküler hastalık için tedavi gördükten sonra sağlık durumu kötü.

Steve Jobs'un ölümünden bir hafta sonra öldü, ancak medyada çok fazla yer almadı. Fedora Linux 16, Dennis Ritchie'yi anmak için 2012'de piyasaya sürüldü.

Bir bilgisayar tarihçisi olan Paul Kresi, Ritchie'nin ölümünden sonra söyledi.

Brian W. Kernighan, Dennis M. Ritchie
C programlama dili
İkinci baskı
AT&T Bell Laboratuvarları
Murray Tepesi, New Jersey
Prentice Hall PTR, Englewood Kayalıkları, New Jersey 07632
B. Kernighan, D. Ritchie
C programlama dili
3. baskı revize edildi
Vs. tarafından düzenlenmiş İngilizce'den çeviri. S. Shtarkman
Nevsky Lehçesi, St.Petersburg 2001
UDC 681.3.06
BBK 24.4.9
K36
İngilizce Vic'den çevrildi. S. Shtarkman, Vs. tarafından düzenlenmiştir. S. Shtarkman.
Kernighan B., Ritchie D.
K36 C programlama dili.\\ Per. İngilizceden, 3. baskı, rev. - SPb .: "Nevsky Lehçesi", 2001. - 352 s.: Hasta.
Ünlü yazarların, C dilinin geliştiricilerinin kitabı, 1988'de 2. İngilizce baskısı yayınlanan C dili için ANSI standardı dikkate alınarak gözden geçirilmiş ve tamamlanmış, uzun zamandır tüm öğrenciler ve / veya hem C hem de C ++ kullanan bir klasik haline gelmiştir. Bu kitabın Rusça çevirisi ilk olarak 1992 yılında "Finans ve İstatistik" yayınevi tarafından yayınlandı ve o zamandan beri okuyucular arasında sürekli talep görüyor.
Bu üçüncü Rusça baskısı için, çeviri orijinaline göre revize edildi, geçtiğimiz yıllarda oluşturulan terminolojideki değişiklikleri ve yazar tarafından http://cm.bell-labs.com/cm/ sayfasında yayınlanan yorumları dikkate almak için bazı değişiklikler yapıldı. cs / cbook / 2ediffs.html
Programcılar, öğretmenler ve öğrenciler için.
Yayın, "Finans ve İstatistik" yayınevinin katılımıyla hazırlandı.
ISBN 5-7940-0045-7 © 1998, 1978, Bell Telephone Laboratories, Incorporated
ISBN 0-13-110362-8 (PBK)
1

ISBN 0-13-110370-9 (İngilizce) © "Nevsky Lehçesi", 2001
Giriş
C evrensel bir programlama dilidir. Bu sistem üzerinde geliştirildiği için UNIX sistemi ile yakından ilgilidir ve üzerinde çalışan programların çoğu gibi C ile yazılmıştır. Ancak dil, herhangi bir işletim sistemine veya makineye sıkı bir şekilde bağlı değildir. Derleyiciler ve işletim sistemleri yazmak için uygun olduğu için "sistem programlama dili" olarak adlandırılsa da, farklı bir profilde büyük programlar yazmak için de aynı derecede iyi olduğu ortaya çıktı.
C'nin önemli fikirlerinin çoğu Martin Richards'ın BCPL'den geliyor. Etkilemek
C'deki BCPL, PDP-7'de uygulanan ilk UNIX sistemi için 1970'te Ken Thompson tarafından geliştirilen B dili aracılığıyla dolaylıydı.
BCPL ve B "tipsiz" dillerdir. Bunun aksine, C çeşitli veri türleri sağlar. Temel türler, çeşitli boyutlarda tam sayılar ve kayan nokta sayılarının yanı sıra karakterlerdir. Ek olarak, işaretçilerden, dizilerden, yapılardan ve birliklerden türetilmiş veri türlerinin bütün bir hiyerarşisini elde etmek mümkündür. İfadeler işleçlerden ve işlenenlerden oluşturulur. Atama ve işlev çağrısı dahil herhangi bir ifade bir talimat olabilir. İşaretçiler makineden bağımsız adres aritmetiği sağlar.
C, iyi yapılandırılmış programlarda kullanılan temel kontrol yapılarına sahiptir: bileşik ifade ((...)), Koşullu dallanma ( eğer-değilse), birçok ( değiştirmek), üstte kontrol olan döngüler ( süre, için) ve aşağıdaki kontrolle ( yapmak) ve bir döngü kesicinin ( kırmak).
Sonuç olarak, işlevler temel türlerin, yapıların, birleşimlerin ve işaretçilerin değerlerini döndürebilir. Herhangi bir işlev kendini yinelemeli olarak çağırabilir. Kural olarak, bir işlevin yerel değişkenleri "otomatiktir", yani her çağrıldığında yeniden oluşturulurlar.
İşlev tanımları yuvalanamaz, ancak değişken bildirimlerinin blok yapılı bir şekilde oluşturulmasına izin verilir. Bir C programının işlevleri ayrı kaynak dosyalarda saklanabilir ve bağımsız olarak derlenebilir. Bir işleve ilişkin değişkenler dahili veya harici olabilir. İkincisi, tek bir kaynak dosyada veya tüm programda mevcut olabilir.
Ön işleme aşamasında, program metnine makro ikamesi, diğer kaynak dosyaların dahil edilmesi ve koşullu derleme gerçekleştirilir.
C, nispeten "düşük seviyeli" bir dildir. Bununla birlikte, bu, avantajlarından uzaklaşmaz, basitçe C'nin çoğu bilgisayarla aynı nesnelerle, yani sembollerle, sayılarla ve adreslerle ilgilenmesidir. Gerçek makineler tarafından gerçekleştirilen aritmetik ve mantıksal işlemler kullanılarak manipüle edilebilirler.
C, karakter dizileri, kümeler, listeler ve diziler gibi karmaşık nesneler üzerinde doğrudan işlem yapmaz. Tüm dizileri veya karakter dizilerini işleyen hiçbir işlemi yoktur,
ancak yapıların bütünlükleri içinde tek nesneler olarak kopyalanmasına izin verilir. Dil, statik değişkenleri tanımlama yeteneği ve işlevler içindeki yerel değişkenler için yer ayırırken bir yığın mekanizması dışında herhangi bir bellek ayırma yöntemi sağlamaz. İçinde "yığın" veya "çöp toplayıcı" yoktur. Son olarak, C'nin kendisinde G / Ç, OKUMA ve YAZMA talimatları yoktur
(yazma) ve herhangi bir dosya erişim yöntemi. Bunların tümü, C'de yalnızca açıkça adlandırılan işlevlerin yardımıyla sağlanan yüksek düzey mekanizmalardır. Uygulanan S-sistemlerinin çoğu, bu işlevlerin makul bir standart setini içerir.
Yukarıdakilerin devamında, C'nin yalnızca hesaplama akışının sıralı kontrolünün yollarını sağladığına dikkat edilmelidir: koşullara, döngülere, bileşik talimatlara göre dallanma mekanizması,
2

alt yordamları içerir ve çoklu programlama, paralel süreçler, eşzamanlılık ve eşgüdümlerin organizasyon araçlarını içermez.
Listelenen özelliklerin bazılarının olmaması ciddi bir dezavantaj gibi görünebilir ("iki karakter dizisini karşılaştırmak için bir işlevi çağırmak gerekli mi?"). Bununla birlikte, dilin yoğunluğunun gerçek faydaları vardır. C nispeten küçük olduğu için tanımı kısadır ve hızlı bir şekilde öğrenilebilir. Programcı, dilin tüm özelliklerini bileceği, anlayacağı ve pratikte düzenli olarak kullanacağı gerçeğine gerçekten güvenebilir.
Uzun yıllar boyunca, C'nin tek tanımı C Programlama Dili'nin ilk baskısıydı. 1983'te Amerikan Ulusal Standartlar Enstitüsü (ANSI), C'nin modern ve kapsamlı bir tanımını geliştirmek için bir komite kurdu. Çalışmasının sonucu, 1988'de piyasaya sürülen C ("ANSI-C") standardıydı. Bu standardın hükümlerinin çoğu modern derleyicilerde zaten dikkate alınmıştır.
Standart, orijinal başvuru kılavuzuna dayanmaktadır. İkincisiyle karşılaştırıldığında, dil nispeten az değişti. Standardın amaçlarından biri, çoğu durumda, mevcut programların doğru kalmasını sağlamak veya davranış değişiklikleri hakkında derleyici uyarılarına neden olmaktı.
Çoğu programcı için en önemli değişiklik, işlevleri bildirmek ve tanımlamak için yeni sözdizimidir. Bir işlev bildirimi artık bağımsız değişkenlerinin bir açıklamasını içerebilir. İşlev tanımının sözdizimi buna göre değişti. Ek bilgiler, derleyicinin uyumsuz argümanlarla ilgili hataları tanımlamasını çok daha kolaylaştırır; Bize göre bu, dile çok faydalı bir katkı.
Bir dizi küçük değişiklik de not edilmelidir. Dil, bir süredir yaygın olarak kullanılan yapıların ve numaralandırmaların atanmasını yasallaştırıyor. Kayan nokta hesaplamalarına artık tek hassasiyetle izin verilmektedir. Özellikle işaretsiz tipler için geliştirilmiş aritmetik özellikler. Geliştirilmiş ön işlemci. Çoğu programcının bu değişiklikler üzerinde çok az etkisi olacaktır.
Standardın ikinci önemli katkısı, işletim sisteminin yeteneklerine erişme işlevlerini belirleyen C-derleyiciyle birlikte sağlanan bir kitaplığın tanımıdır.
(örneğin, dosya okuma / yazma), biçimlendirilmiş G / Ç, dinamik bellek tahsisi, karakter dizisi manipülasyonu, vb. Bir dizi standart başlık dosyası, işlev ve veri türü bildirimlerine tek tip erişim sağlar. İşletim sistemiyle etkileşimde bulunurken bu kitaplığı kullanan programların diğer makinelerde de çalışacağı garanti edilir. Kitaplığı oluşturan programların çoğu UNIX "standart G / Ç kitaplığı" ndan sonra modellenmiştir. Bu kütüphane, kitabın ilk baskısında anlatılmıştır ve diğer sistemlerde yaygın olarak kullanılmaktadır. Ve burada programcılar önemli farklılıklar fark etmeyecekler. C dilinin veri türleri ve kontrol yapıları mevcut makinelerin çoğunun komutlarıyla desteklendiğinden, programların bağımsız olarak başlatılmasını ve yürütülmesini sağlayan yürütme sistemi (çalışma zamanı kitaplığı) çok küçüktür. Kitaplık işlevlerine yapılan çağrılar programcının kendisi (derleyici değil) tarafından yazılır, bu nedenle istenirse başkalarıyla kolayca değiştirilebilir. C ile yazılmış programların neredeyse tamamı, işletim sisteminde gizli olan hiçbir ayrıntıya dokunmazlarsa diğer makinelere taşınabilir.
C, birçok makinenin donanım yetenekleriyle eşleşir, ancak herhangi bir makinenin mimarisine bağlı değildir. Biraz disiplinle, taşınabilir programlar, yani farklı makinelerde değişiklik yapmadan çalışabilen programlar yazmak kolaydır.
Standart, programın üzerinde çalışacağı makinenin özelliklerini yansıtan bir dizi sabit kullanarak taşınabilirliği açıkça tanımlama becerisi sağlar.
C, "güçlü bir şekilde yazılmış" bir dil değildir, ancak geliştirilme sürecinde tür kontrolü güçlendirilmiştir. C'nin ilk versiyonunda, onaylanmamış olmasına rağmen, kontrolsüz işaretçi ve tamsayı değişimine izin verdi, bu da büyük eleştirilere neden oldu, ancak bu uzun zamandır yasaklandı. Standarda göre, artık iyi bir derleyicide uygulanmış olan açık bir bildirim veya dönüşümün açık bir göstergesi gereklidir. Yeni tür işlev bildirimi, bu yöndeki başka bir adımdır. Derleyici artık çoğu tür hatası hakkında uyarıyor ve otomatik olarak dönüştürme gerçekleştirmiyor
3

uyumsuz türlerin verileri. Ancak, C'nin temel felsefesi, programcıların ne yaptıklarını bilmeleri; dil yalnızca niyetlerinin açık bir şekilde belirtilmesini gerektirir.
C, diğer herhangi bir programlama dili gibi, kusurlardan arınmış değildir. Bazı operatörlerin öncelik seviyesi genel olarak kabul edilmez, bazı sözdizimsel yapılar daha iyi olabilir. Bununla birlikte, C'nin çok çeşitli görevler için uygun, son derece güçlü ve ifade edici bir dil olduğu ortaya çıktı.
Kitap aşağıdaki yapıya sahiptir.
Bölüm 1
C dilinin temel özelliklerine genel bir bakıştır. Yeni bir dil öğrenmenin tek yolunun ona programlar yazmak olduğuna ikna olduğumuzdan, okuyucuyu mümkün olan en kısa sürede programlamaya başlamaya teşvik etmektir. Kitabın bu bölümü, programlamanın temel unsurları hakkında bilgi sahibi olduğunu varsayar. Bir bilgisayarın ne olduğuna, derlemesine veya n \u003d n + 1 gibi bir ifadenin ne anlama geldiğine dair hiçbir açıklama yapılmaz. Mümkün olan yerlerde faydalı programlama tekniklerini göstermeye çalışmış olsak da, bu kitap veri yapıları veya algoritmalarla çalışmak için bir referans olarak tasarlanmamıştır: Neyi vurgulayacağımızı seçmek gerektiğinde, dile odaklanmayı tercih ettik.
Bölüm 2-6, dilin çeşitli özelliklerini Bölüm 1'den daha ayrıntılı ve biraz daha resmi olarak tartışmaktadır; ancak yine de, izole parçalar yerine tam programlar olan örnekler üzerinde durulmaktadır.
Bölüm 2
temel veri türlerini, operatörleri ve ifadeleri tanıtır. 3. bölümde
kontroller hesaplama sırası dikkate alınır: eğer-
başka, değiştirmek, süre, için vb. 4. bölümde
önişlemcinin yanı sıra programın işlevleri ve yapısından (dış değişkenler, görünürlük kuralları, programı birkaç kaynak dosyaya bölme vb.) bahsediyoruz. 5. bölümde
işaretçileri ve adres aritmetiğini tartışır.
Bölüm 6
yapılara ve derneklere adanmış.
Bölüm 7'de
işletim sistemine ortak bir arabirim sağlayan standart bir kitaplığı açıklar. Bu kütüphane bir ANSI standardı olarak yasallaştırılmıştır, başka bir deyişle, C'nin bulunduğu tüm makinelerde sunulmalıdır, böylece I / O ve işletim sisteminin diğer özelliklerini kullanan programlar bir makineden diğerine herhangi bir değişiklik yapılmadan aktarılabilir.
Bölüm 8
C programları ile UNIX işletim sistemi arasındaki arayüzün bir açıklamasını, özellikle G / Ç, dosya sistemi ve bellek tahsisinin bir açıklamasını içerir. Bu bölümdeki bazı paragraflar UNIX sistemine özgü olsa da, diğer sistemleri kullanan programcılar, standart kitaplığın bir sürümünün nasıl uygulandığına dair bazı bilgiler ve program taşınabilirliği için bazı öneriler de dahil olmak üzere birçok yararlı bilgi bulacaklardır.
Ek A
bir dil referansıdır. C dilinin sözdizimi ve semantiğinin katı bir tanımı, resmi ANSI standart belgesinde yer almaktadır. Ancak ikincisi, derleyici geliştiricileri için en uygun olanıdır. Rehberimiz, standardın kullandığı bilgiçlikçi hukuk stiline başvurmadan dili daha özlü bir şekilde tanımlar.
Ek B
standart kitaplığın içeriğinin bir özetidir ve uygulayıcılardan çok kullanıcılara yöneliktir. Ek C
dilin ilk sürümünden farklılıkların kısa bir listesini sağlar. Ancak şüphe durumunda, dilin son yargıcı kullandığınız standart ve derleyicidir.
Bölüm 1. Dile genel bakış
1.1 Başlayalım belki
1.2 Değişkenler ve aritmetik ifadeler
1.3 Talimat
için
1.4 İsimli sabitler
4

1.5 Karakter G / Ç
1.5.1 Dosyayı kopyala
1.5.2 Karakter Sayma
1.5.3 Satır Sayısı
1.5.4 Kelime Sayısı
1.6 Diziler
1.7 Fonksiyonlar
1.8 Argümanlar. Değere göre ara
1.9 Karakter dizileri
1.10 Dış Değişkenler ve Kapsam
Bölüm 2. Türler, İşleçler ve İfadeler
2.1 Değişken isimleri
2.2 Veri türleri ve boyutları
2.3 Sabitler
2.4 Duyurular
2.5 Aritmetik operatörler
2.6 İlişkisel ve Boole Operatörleri
2.7 Tür dönüşümleri
2.8 Arttırma ve azaltma operatörleri
2.9 Bitsel operatörler
2.10 Atama operatörleri ve ifadeleri
2.11 Koşullu İfadeler
2.12 Öncelik ve hesaplama sırası
Bölüm 3. Yönetim
3.1 Talimatlar ve bloklar
3.2 İnşaat
eğer-değilse
3.3 İnşaat
else-if
3.4 Anahtar
değiştirmek
3.5 Döngüler
süre
ve
için
3.6 Döngü
yapmak
- süre
3.7 Talimatlar
kırmak
ve
devam et
3.8 Talimat
git
ve etiketler
Bölüm 4. Programın işlevleri ve yapısı
4.1 Fonksiyon Temelleri
4.2 Tam sayı olmayan değerler döndüren işlevler
4.3 Dış değişkenler
4.4 Kapsamlar
4.5 Başlık dosyaları
4.6 Statik değişkenler
4.7 Değişkenleri kaydetme
4.8 Blok yapısı
4.9 Başlatma
4.10 Özyineleme
4.11 C dili ön işlemcisi
4.11.1 Dosya dahil etme
5

4.11.2 Makro ikame
4.11.3 Koşullu Derleme
Bölüm 5. İşaretçiler ve Diziler
5.1 İşaretçiler ve Adresler
5.2 İşaretçiler ve işlev argümanları
5.3 İşaretçiler ve Diziler
5.4 Adres aritmetiği
5.5 Sembolik işlev işaretçileri
5.6 İşaretçi dizileri, işaretçiler için işaretçiler
5.7 Çok boyutlu diziler
5.8 İşaretçi Dizilerini Başlatma
5.9 İşaretçiler ve Çok Boyutlu Diziler
5.10 Komut satırı argümanları
5.11 İşlev işaretçileri
5.12 Karmaşık beyanlar
Bölüm 6. Yapılar
6.1 Yapıları Anlamak
6.2 Yapılar ve fonksiyonlar
6.3 Yapı dizileri
6.4 Yapılara işaretçiler
6.5 Kendilerine atıfta bulunan yapılar
6.6 Tabloları görüntüleme
6.7 Typedef tesisi
6.8 Sendikalar
6.9 Bit alanları
Bölüm 7. Giriş ve Çıkış
7.1 Standart G / Ç
7.2 Biçimlendirilmiş çıktı (
printf
7.3 Değişken uzunluklu bağımsız değişken listeleri
7.4 Girişi formatlama (
scanf
7.5 Dosyalara erişim
7.6 Hata yönetimi (
stderr
ve
çıkış
7.7 Dizi G / Ç
7.8 Diğer kütüphane işlevleri
7.8.1 Dize işlemleri
7.8.2 Karakter sınıfı analizi ve karakter dönüşümü
7.8.3 İşlev
ungetc
7.8.4 İşletim sistemi komutlarını yürütme
7.8.5 Bellek Yönetimi
7.8.6 Matematiksel fonksiyonlar
7.8.7 Rastgele sayı üreteci
6

Bölüm 8. UNIX Sistem Arayüzü
8.1 Dosya tanımlayıcıları
8.2 Düşük G / Ç (okuma ve yazma)
8.3 Sistem Çağrıları açılır, yaratılır, kapatılır, bağlantıyı kaldırır
8.4 Rastgele erişim (lseek)
8.5 Örnek. Fopen ve getc işlevlerinin gerçeklenmesi
8.6 Örnek. Katalog yazdırma
8.7 Örnek. Bellek ayırıcı
Ek A. Referans Kılavuzu
A1. Giriş
A2. Kelime anlaşmaları
A2.1. Lexemes (
jetonlar
A2.2. Yorum Yap
A2.3. Tanımlayıcılar
A2.4. Anahtar kelimeler
A2.5. Sabitler
A2.5.1. Tamsayı sabitleri
A2.5.2. Karakter sabitleri
A2.5.3. Kayan nokta sabitleri
A2.5.4. Numaralandırma sabitleri
A2.6. Dize değişmez değerleri
A3. Sözdizimi gösterimi
A4. Tanımlayıcılar ne anlama geliyor?
A4.1. Bellek sınıfı
A4.2. Temel tipler
A4.3. Türetilmiş türler
A4.4. Tür niteleyiciler
A5. Nesneler ve Ldeğerler
A6. Dönüşümler
A6.1. Tam sayı artışı
A6.2. Tam sayı dönüşümleri
A6.3. Tam sayılar ve kayan nokta sayıları
A6.4. Kayan nokta türleri
A6.5. Aritmetik dönüşümler
A6.6. İşaretçiler ve Tamsayılar
A6.7. Bir tür
geçersiz
A6.8. İşaretçiler
geçersiz
A7. İfade
A7.1. İşaretçi üretimi
A7.2. Birincil ifadeler
A7.3. Sonek ifadeleri
A7.3.1. Dizi öğelerine erişim
A7.3.2. İşlev çağrısı
A7.3.3. Yapılara atıfta bulunmak
7

A7.3.4. Sonek artırma ve azaltma operatörleri
A7.4. Tekli Operatörler
A7.4.1. Önek artırma ve eksiltme operatörleri
A7.4.2. Adresi alma operatörü
A7.4.3. Dolaylı Erişim Operatörü
A7.4.4. Tekli artı operatörü
A7.4.5. Tekli eksi operatör
A7.4.6. Bitsel olumsuzlama operatörü
A7.4.7. Mantıksal olumsuzlama operatörü
A7.4.8. Boyutlandırma operatörü
boyutu
A7.5. Döküm operatörü
A7.6. Çarpımsal operatörler
A7.7. Katkı Operatörleri
A7.8. Vardiya operatörleri
A7.9. İlişkisel operatörler
A7.10. Eşitlik operatörleri
A7.11. Bitsel operatör
VE
A7.12. Bitsel özel operatör
VEYA
A7.13. Bitsel operatör
VEYA
A7.14. Boole operatörü
VE
A7.15. Boole operatörü
VEYA
A7.16. Koşullu operatör
A7.17. Atama ifadeleri
A7.18. Virgül operatörü
A7.19. Sabit ifadeler
A8. reklamlar
A8.1. Bellek sınıfı belirleyicileri
A8.2. Tür belirleyicileri
A8.3. Yapı ve sendika bildirimleri
A8.4. Numaralandırmalar
A8.5. Spikerler
A8.6. Reklamverenler ne demek
A8.6.1. İşaretçi bildiricileri
A8.6.2. Dizi tanımlayıcıları
A8.6.3. İşlev bildirimleri
A8.7. Başlatma
A8.8. Adları yazın
A8.9. Duyuru
typedef
A8.10. Tür denkliği
A9. Talimatlar
A9.1. Etiketli talimatlar
A9.2. İfade ifadesi
A9.3. Birleşik ifade
A9.4. Seçim talimatları
A9.5. Döngüsel talimatlar
A9.6. Geçiş talimatları
A10. Dış bildirimler
A10.1. Fonksiyon tanımı
A10.2. Dış bildirimler
8

A11. Kapsam ve iletişim
A11.1. Sözcük kapsamı
A11.2. Bağlantılar
A12. Ön işleme
A12.1. Üç karakterli diziler
A12.2. Dizeleri birleştirme
A12.3. Makro tanımlama ve makro genişletme
A12.4. Dosya dahil etme
A12.5. Koşullu derleme
A12.6. Satır numaralandırma
A12.7. Bir hata mesajı oluşturma
A12.8. Pragma
A12.9. Boş yönerge
A12.10. Önceden tanımlanmış isimler
A13. Dilbilgisi
Ek B.Standart Kitaplık
B1. Giriş çıkış:

B1.1. Dosya işlemleri
B1.2. Biçimlendirilmiş çıktı
B1.3. Biçimlendirilmiş giriş
B1.4. Karakter giriş / çıkış fonksiyonları
B1.5. Doğrudan G / Ç işlevleri
B1.6. Dosya konumlandırma fonksiyonları
B1.7. Hata işleme fonksiyonları
B2. Karakter sınıfı kontrolleri:

B3. Dizelerde çalışan işlevler:

B4. Matematiksel fonksiyonlar:

B5. Genel amaçlı işlevler:

B6. Teşhis:

B7. Değişken uzunluklu bağımsız değişken listeleri:

B8. Uzun mesafeli geçişler:

B9. Sinyaller:

B10. Tarih ve saat işlevleri:

B11. Uygulamaya bağlı sınırlar:

ve

Kitabı indirdiğiniz için teşekkür ederiz. ücretsiz elektronik kütüphane Royallib.ru

Diğer formatlarda aynı kitap

Okumanın tadını çıkar!

B. Kernighan, D. Ritchie

C programlama dili

3. baskı revize edildi

Önsöz

The C Programming Language'ın 1978'de yayınlanmasından bu yana, bilgisayar dünyasında bir devrim yaşandı. Büyük makineler daha da büyüdü ve kişisel bilgisayarların yetenekleri artık on yıl önceki büyük makinelerinkilerle karşılaştırılabilir. C dili de bu süre zarfında çok fazla olmasa da değişti; C'nin kapsamı söz konusu olduğunda, UNIX işletim sisteminin araç dili olarak asıl amacının çok ötesine geçmiştir.

C'nin popülaritesindeki artış, yıllar içinde biriken değişimler, daha önce dilin tasarımına dahil olmayan geliştiricilerden oluşan ekipler tarafından derleyiciler oluşturulması - bunların tümü, kitabın ilk baskısına kıyasla dilin daha doğru ve zamana duyarlı bir tanımı için bir teşvik işlevi gördü. 1983'te Amerikan Ulusal Standartlar Enstitüsü (ANSI), stilini korurken "C dilinin kesin ve makineden bağımsız bir tanımını" geliştirmek amacıyla bir komite kurdu. Bu komitenin çalışmalarının sonucu ANSI C standardıydı.

Standart, yapılara atamalar ve numaralandırmalar gibi ilk baskıda yalnızca taslak haline getirilmiş ancak açıklanmamış dil özelliklerini resmileştirir. İşlev çağrılarının tanımları ile tutarlılığının yaygın bir şekilde kontrol edilmesine izin veren yeni bir tür işlev açıklaması sunar; çok çeşitli G / Ç, bellek yönetimi, karakter dizisi manipülasyonu ve diğer işlevler içeren standart bir kitaplığı belirtir; Orijinal tanımda belirsiz olan anlambilimini rafine eder ve makineye bağlı kalanı açıkça vurgular.

The C Programming Language'in ikinci baskısı, ANSI standardı olarak benimsenen C sürümünü sunar. Değişiklik geçirdiği yerleri not ederek dili yeniden tanımlamaya karar verdik. Çoğu paragrafta, bu önemli değişiklikler getirmemiştir, en dikkat çekici farklılıklar, işlevin yeni tanımı ve tanımı ile ilgilidir. Modern derleyicilerin standardın önemli bir kısmı için zaten destek sağladığına dikkat edilmelidir.

İlk baskıyı kısa tutmaya çalıştık. C küçük bir dildir ve onu tanımlamak için büyük bir kitap gerektirmez. Yeni sürüm, C programlamanın merkezinde yer alan işaretçiler gibi en önemli özelliklerin açıklamasını iyileştiriyor; eski örnekler geliştirildi ve bazı bölümlere yenileri eklendi. Bu nedenle, karmaşık reklamların yorumlanmasını geliştirmek için, reklamları sözlü açıklamalarına çevirmeye yönelik programlar ve bunun tersi örnek olarak dahil edilmiştir. Daha önce olduğu gibi, tüm örnekler doğrudan makine tarafından okunabilir biçimde yazılmış metinlere karşı test edildi.

Ek A bir referans kılavuzdur, ancak hiçbir şekilde bir standart değildir. İçinde, en önemli olanı minimum sayfaya koymaya çalıştık. Tasarım gereği, bu uygulamanın bir kullanıcı programcısı tarafından okunması kolay olmalıdır: derleyici geliştiricileri için dilin kendisi standart olmalıdır. Ek B, standart kitaplığın yeteneklerini listeler. Aynı zamanda uygulama programcıları için bir referanstır, ancak derleyici geliştiricileri için değildir. Ek C, C dilinin sunulan sürümünün ilk sürümünden farklılıklarının kısa bir listesini içerir.

İlk baskının önsözünde "C ile ne kadar çok çalışırsanız, o kadar kolay hale gelir" demiştik. Bu izlenim, onunla on yıl çalıştıktan sonra kaldı. Bu kitabın C öğrenmenize ve başarıyla kullanmanıza yardımcı olacağını umuyoruz.

Bu kitabın ikinci baskısını çıkarmamıza yardımcı olan arkadaşlarımıza derinden minnettarız. John Bentley, Doug Gunn, Doug McIlroy, Peter Nelson ve Rob Pike, el yazmasının ilk taslağının neredeyse her sayfasında net yorumlar yaptılar. Bu kitabı dikkatlice okudukları için Al Aho, Dennis Allisson, Joy Campbell, H.R. Emlin, Karen Fortgang, Allen Golub, Andrew Hume, Dave Christol, John Linderman, Dave Prosser, Gin Spafford ve Chris Van Wick'e minnettarız. Bill Cheswick, Mark Kernighan, Andrew Coenig, Robin Lake, Tom London, Jim Reeds, Clovis Tondo ve Peter Weinberger'den faydalı ipuçları aldık. Dave Prosser, ANSI standardının ayrıntılarıyla ilgili çok sayıda soruyu yanıtladı. Programlarımızı yerel olarak kontrol etmek için Bjarne Stroustrup'ın C ++ çeviricisini yoğun bir şekilde kullandık ve Dave Kristol, son test için bize bir ANSI C derleyicisi sağladı. Rich Dreschler kitabı yazarken çok yardımcı oldu. Herkese içtenlikle teşekkür ederiz.

Brian W. Kernigan, Dennis M. Ritchie

Transcript

1 B.V. Kernighan, D.M. Richie. DİL

2 Özet "C" dili ("si" olarak telaffuz edilir), ifade ekonomisi, modern kontrol akışı ve veri yapıları ve zengin bir operatör kümesi ile karakterize edilen evrensel bir programlama dilidir. "C" dili ne "çok yüksek seviyeli" bir dil ne de "büyük" bir dildir ve bazı özel uygulama alanları için tasarlanmamıştır. ancak dilin kısıtlamalarının ve genelliğinin olmaması, dili sözde daha güçlü dillere göre birçok görev için daha uygun ve verimli kılar. Başlangıçta UNIX işletim sistemini DEC PDP-11 üzerine yazmak için tasarlanan C dili, Dennis Ritchie tarafından bu sistem üzerinde geliştirilmiştir. İşletim sistemi, C derleyicisi ve esasen tüm UNIX uygulamaları (bu kitabın hazırlanmasında kullanılan tüm yazılımlar dahil) C'de yazılmıştır. Ticari "C" derleyicileri, IBM SYSTEM / 370, HONEYWELL 6000, INTERDATA 8/32 dahil olmak üzere diğer birkaç bilgisayarda da mevcuttur. Bununla birlikte, "C" dili, belirli bir donanım veya sistemle ilişkili değildir ve "C" derleyicisine sahip herhangi bir bilgisayarda değişiklik yapılmadan geçirilebilen programları yazmak kolay değildir. Bu kitap, okuyucunun "C" dilinde nasıl programlanacağını öğrenmesine yardımcı olmayı amaçlamaktadır. Yeni kullanıcıların olabildiğince çabuk kodlamaya başlamaları için eğitici bir giriş, dilin tüm ana özellikleriyle ilgili ayrı bölümler ve bir başvuru kılavuzu içerir. Öğrenme, sadece kuralları formüle etmeye değil, örnekleri okumaya, yazmaya ve ayrıştırmaya dayanır. Kitaptaki örnekler, ayrı parçalar değil, çoğunlukla tam gerçek programlardır. Tüm örnekler, bir makineye girilmeye uygun bir biçimde basıldıkları kitap metninden doğrudan doğrulandı. Dilin kullanımının nasıl daha verimli hale getirileceğine dair talimatlar vermenin yanı sıra, mümkün olan yerlerde, iyi stil ve akıllı tasarımın yararlı algoritmalarını ve ilkelerini göstermeye çalıştık. Bu kitap, programlamaya giriş niteliğinde bir ders değildir; değişkenler, atama ifadeleri, döngüler, fonksiyonlar gibi temel programlama kavramlarına aşinalık olduğunu varsayar. Bununla birlikte, programlamaya yeni başlayan bir kişi, arka arkaya okuyabilmeli ve dile aşina olmalıdır, ancak daha deneyimli bir meslektaşın yardımı faydalı olacaktır. Deneyimlerimize göre, "C" çok çeşitli farklı programlarda hoş, ifade edici ve çok yönlü bir dil olduğunu kanıtlamıştır. Programcının deneyimi sayesinde öğrenmesi kolaydır ve niteliklerini kaybetmez. Bu kitabın onu iyi bir şekilde kullanmanıza yardımcı olacağını umuyoruz. Pek çok arkadaşımızın ve meslektaşımızın düşünceli eleştiri ve önerileri, hem kitabın kendisi hem de onu yazmaktan aldığımız zevk için çok şey kattı. Özellikle Mike Biapsi, Jim Blue, Stu Feldman, Doug McIlroy, Bill Room, Bob Rosin ve Larry Rosler birçok seçeneği dikkatlice okudu. Ayrıca El Aho, Steve Bourne, Dev Dvorak, Chuck Haley, Debbie Haley, Marion Harris, Rick Holt, Steve Johnson, John Masha, Bob Mitz, Ralph Mewa, Peter Nelson, Elliot Pinson, Bill Spyver, Jerry ve çeşitli aşamalardaki faydalı yorumları için Peter Weinberger'e ve kitabın basımında paha biçilmez yardım için Mike Losk ve Joe Hosanna'ya. Brian W. Kernighan Dennis M. Richie


3 İçindekiler GİRİŞ 9 1. GİRİŞ ÇALIŞMASI HACHINAEM Değişkenler ve Aritmetik İŞLEMCİ Kullanışlı programların sembolik sabit toplanması İÇİN SEMBOLLERİN GİRİŞ VE ÇIKIŞI dosya kopyala karakter sayısı satır sayısı kelime sayısı dizi işlevi değere göre çağrı ARGUMENTS karakter dizisi KAPSAM: Harici değişken türleri, operatörler ve ifadeler NAMES DEĞİŞKEN TİPLER VE BOYUT VERİ SABİTLERİ Karakter sabitleri sabit ifadelerdir LL Sabit Açıklama Aritmetik İşlemler ilişkisel operatörler ve mantıksal işlemler tip dönüştürme artırma ve azaltma işlemleri bitsel mantıksal operatörler ve ifadeler ATAMA KOŞULLU EKSPRESYONLAR öncelik ve değerlendirme sırası AKIŞ KONTROL OPERATÖRLERİ VE BAŞKA EĞER EĞER BİRİMLER ANAHTAR OPERATÖR ARASI 67 SIRASINDA


4 3.8. OPERATOR CONTINUE OPERATOR GOTO IMETKI STRUCTURE FUNCTION AND PROGRAM INFORMATION fonksiyonu, fonksiyon bağımsız değişkenlerinin tamsayı olmayan bir değerini döndürür.DAHA FAZLA DIŞ DEĞİŞKENLERDE DEĞİŞKENLERİN STATİK ALANININ BÖLGESİNİN BELİRLENMESİNE İLİŞKİN TERİMLER "BLOCK INITIALIZATION STRUCTURE" kayıt değişkeni "5. tekrarlama ön işlemi" DİZİNLER VE ADRESLER GÖSTERGELER VE FONKSİYONEL ARGÜMANLAR GÖSTERGELERİ VE ARİTMETİK SEMBOL GÖSTERGELERİ VE FONKSİYON GÖSTERGELERİ TAMAMEN ÇOK BOYUTLU DİZİLİM GÖSTERGELERİ DEĞİLDİR; İşaretçi İşaretçi diziyi başlatır Dizin Dizini ve işlev işaretçilerinin çok boyutlu komut satırı argümanları dizisi STRUCTURE BASICS yapılara işaretçilerden oluşan bir yapı dizisinin yapısı ve işlevi STRUCTURE kendinden referanslı tablo araması ALAN BİRLİKLERİ TİP TANIMI GİRİŞ VE ÇIKIŞ standart giriş ve çıkış işlevleri kitaplığına referans GETCHAR VE PUTCHAR 150


5 7.3. Biçimlendirilmiş çıktı işlevleri PRINTF formatlı giriş FONKSİYONU TARAMA yön Dosyalara BELLEKTE DÖNÜŞÜM HATA İŞLEME STDERR VE ÇIKIŞ GİRİŞ VE ÇIKIŞ HATLARI form ve dönüştürme işlevlerinin birkaç farklı kontrol işlevi sembolü UNGETC KULLANMA SİSTEMİ BELLEK YÖNETİM ARAYÜZ SİSTEMİ UNIX dosya tanımlayıcı düşük seviyeli G / Ç ifadeleri OKU VE Rastgele erişimi açma, oluşturma, kapatma ve ayırma (BAĞLANTISINI ÇIKARMA) YAZIN FOPEN ve GETC işlevlerini uygulayan ÖRNEK ARA VE LSEEK Örneği PRINT DIRECTORY ÖRNEĞİ ayırıcılar EK A: MANUEL "C" dili Giriş SABİT anahtar kelimesinin Sözcük Kuralları açıklama tanımlayıcıları ENTEGER SABİTLERİ AÇIKLAMAK UZUN SABİTLER SEMBOL SABİTLERİ YÜZER SABİTLER ŞEKİLLER DONANIM ÖZELLİKLERİ SYNTAX NOTASYON ADINIZDA NE VAR? NESNELER VE L DEĞERLERİ 187


6 14. Dönüşüm karakterleri ve tam sayı türleri FLOAT ve DOUBLE kayan ve tamsayı değeri İşaretçiler ve tamsayılar işaretsiz tamsayı aritmetik dönüşümler İfadeler Birincil ifadeler tekli işlemler çarpımsal işlemler ek işlemler OPERASYONLAR kaydırma işlemi İLİŞKİLER İŞLEMLER EŞİTLİK Bitsel operatörler "VE" Bitsel işlem özel "veya" Bitsel işlemler "VEYA" mantık işlemlerini "ve" mantıksal "VEYA" koşullu işlemlerini içerir Virgülle ayrılmış işlem atama işlemleri depolama sınıfı türü belirleyici tanımlayıcı ANLAMI tanımlayıcılar yapının açıklaması ve ilişkilendirmeler Başlatma türü adları TYPEDEF OPERATORS operatör ifadesi bileşik ifadeler (veya engeller) koşullu operatör OPERATOR OPERATÖR OPERATÖR ANAHTARI İÇİN OPERATÖR YAPARKEN OPERATÖR KOPARMA OPERATÖRÜ DEVAM ET OPERATÖR GERİ DÖNÜŞ OPERATÖRÜ 211'e GİT


7 etiketli deyim boş operatör harici olarak tanımlanmış harici veri tanımlama kurallarının dış tanımlı fonksiyonu SCOPE sözcüksel Kapsamını tanımlayan Harici tanımlayıcı HAT KONTROL derleyicisinin kapsamı DEĞİŞTİRME LEXEMES, dosyaları koşullu derlemeyi içerir ve yapı türleri ve konsolidasyon DİZELERİ, DİZİNLER VE DİZİN OLUŞTURMA açık dönüştürmeler GÖSTERGELER SABİT İFADELER ANAKRONİZMİN TAŞINABİLİRLİĞİNE İLİŞKİN HUSUSLAR İFADE KURALLARININ SÖZLEŞME ÖZETİ AÇIKLAMA YAPISI ATAMA 227


8 28. YAZDIRILMAMIŞ DİL KARAKTERLERİNİN RESİM TABLOSU "C" LİSTESİ TÜRÜ. 229

9 B.V. Kernighan, D.M. Richie. Dil C. 9 Giriş "C" dili evrensel bir programlama dilidir. Bu sistem üzerinde geliştirildiğinden ve "UNIX" ve yazılımı "C" ile yazıldığından "UNIX" işletim sistemi ile yakından ilgilidir. Bununla birlikte, dilin kendisi tek bir işletim sistemi veya makineyle ilişkili değildir; ve işletim sistemleri yazmak için uygun olduğu için bir sistem programlama dili olarak adlandırılmasına rağmen, büyük bilgi işlem programları, kelime işlem programları ve veritabanları yazmada eşit başarı ile kullanılmıştır. "C" dili, nispeten "düşük seviyeli" bir dildir. Böyle bir tanımlamanın rahatsız edici hiçbir yanı yoktur; basitçe "C" nin çoğu bilgisayarla aynı türden nesnelerle, yani sembollerle, sayılarla ve adreslerle ilgilendiği anlamına gelir. Gerçek bilgisayarlar tarafından gerçekleştirilen olağan aritmetik ve mantıksal işlemlerle birleştirilebilir ve gönderilebilirler. Bir tam sayı olarak karakter dizeleri, kümeler, listeler veya diziler gibi bileşik nesnelerle doğrudan ilgilenen C'de hiçbir işlem yoktur. Burada, örneğin, tamsayı dizileri ve dizgeleri üzerinde çalışan PL / 1 işlemlerine analog yoktur. Dil, statik tanım ve işlevlerin yerel değişkenleri tarafından sağlanan yığın mekanizmasının yanı sıra bellek tahsisi için başka olanaklar sağlamaz; ALGOL-68'de belirtildiği gibi yığın veya çöp toplama yoktur. Son olarak, C'nin kendisi herhangi bir G / Ç yeteneği sağlamaz: READ veya WRITE deyimleri ve yerleşik yöntemler yoktur dosyalara erişim. Bu üst düzey mekanizmaların tümü, açıkça çağrılabilir işlevlerle desteklenmelidir. Benzer şekilde, C yalnızca basit, sıralı akış yapıları sunar: kontroller, döngüler, gruplama ve alt yordamlar, çoklu programlama, paralel işlemler, senkronizasyon veya eşdizimler değil. Bu özelliklerin bazılarının eksikliği sinir bozucu bir aşağılık gibi görünse de ("bu yüzden iki karakter dizisini karşılaştırmak için bir işlev çağırmam gerekiyor?!"), Dili mütevazı tutmanın gerçek faydaları var. "C" nispeten küçük olduğundan, onu tanımlamak için fazla yer kaplamaz ve hızlı bir şekilde öğrenilebilir. Bir "C" derleyicisi basit ve kompakt olabilir. Dahası, derleyicilerin yazılması kolaydır; Modern teknolojiyi kullanarak, yeni bir bilgisayar için birkaç ay içinde bir derleyici yazmayı bekleyebiliriz ve yeni derleyicinin programının yüzde 80'inin mevcut derleyiciler için olan programla ortak olacağı ortaya çıktı. Bu, yüksek derecede dil taşınabilirliği sağlar. "C" de bulunan veri türleri ve denetim yapıları, var olan çoğu bilgisayar tarafından doğrudan desteklendiğinden, korumalı alandaki programları çalıştırırken ihtiyaç duyulan kitaplık çok küçüktür. Örneğin PDP-11'de, yalnızca 32-bit çarpma ve bölme ve sıra giriş ve çıkış programlarını yürütme programları içerir. Elbette, her uygulama G / Ç, dizi işleme ve bellek tahsisini gerçekleştirmek için kapsamlı, tutarlı bir işlev kitaplığı sağlar, ancak bunlara yalnızca açıkça erişildiklerinden, gerekirse bunları çağırmaktan kaçınabilirsiniz; bu işlevler kısaca "C" nin kendisinde yazılabilir. Yine, "C" dili modern bilgisayarların yeteneklerini yansıttığı için "C" programları,


10 B.V. Kernighan, D.M. Richie. Dil C.10 Bu program yerine assembly dilinde yazma konusunda bir teşvik vardır. Bunun en zorlayıcı örneği, neredeyse tamamı "C" ile yazılmış "UNIX" işletim sistemidir. Sistem programının satırlarından, en düşük seviyeli satırların yalnızca yaklaşık 800'ü assembly dilinde yazılmıştır. Ek olarak, esasen tüm UNIX uygulama yazılımları C ile yazılmıştır; UNIX kullanıcılarının büyük çoğunluğu (bu kitabın yazarlarından biri dahil) PDP-11 montaj dilini bile bilmiyor. "C" birçok bilgisayarın yeteneklerine karşılık gelse de, belirli bir makine mimarisine bağlı değildir ve bu nedenle çok fazla çaba harcamadan "taşınabilir" programlar yazmanıza izin verir, yani. çeşitli donanımlarda değiştirilmeden atlanabilen programlar. "UNIX" sistemi üzerinde geliştirilen yazılımların HONEYWELL, IBM ve INTERDATA gibi bilgisayar sistemlerine aktarılması çevrelerimizde bir gelenek haline geldi. Aslında, bu dört sistemdeki "C" derleyicileri ve çalıştırma yazılımı, Amerikan Ulusal Standartlar Enstitüsü (ANSI) Fortran'ın standart sürümlerinden çok daha uyumlu görünmektedir. "UNIX" işletim sisteminin kendisi artık hem PDP-11 hem de INTERDATA 8 / 32'de çalışıyor. Derleyici, derleyici ve hata ayıklayıcı gibi kaçınılmaz olarak makineye bağlı olduğu ortaya çıkan programlar hariç. "C" ile yazılan yazılım her iki makinede de aynıdır. İşletim sistemi içinde, bilgisayar montaj dilinin yazılımı ve girdi-çıktı işlemlerinin kontrolü hariç 7000 satırlık program yüzde 95 oranında çakışmaktadır. Diğer dillere aşina olan programcılar, karşılaştırma ve zıtlık için "C" nin çeşitli tarihsel, teknik ve felsefi yönlerinden bahsetmeyi faydalı bulabilir. En önemli "C" fikirlerinin çoğu, Martin Richards tarafından geliştirilen çok daha eski ancak hala geçerli olan BCPL dilinden geliyor. Dolaylı olarak BCPL, PDP-7'deki ilk "UNIX" işletim sistemi için 1970 yılında Ken Thompson tarafından yazılan "B" dili aracılığıyla "C" yi etkiledi. "C", BCPL ile ortak birkaç özelliğe sahip olmasına rağmen, hiçbir şekilde BCPL'nin bir lehçesi değildir. Hem BCPL hem de "B" "tipsiz" dillerdir; onlar için tek veri türü makine kelimesidir ve diğer nesnelere erişim özel operatörler veya işlev çağrıları tarafından gerçekleştirilir. "C" dilinde, temel veri türlerinin nesneleri, karakterler, çeşitli boyutlarda tam sayılar ve kayan nokta sayılarıdır. Ek olarak, işaretçiler, diziler, yapılar, birlikler ve işlevler tarafından oluşturulan türetilmiş veri türlerinin bir hiyerarşisi vardır. C dili, iyi yapılandırılmış programlar için gerekli temel kontrol akış yapılarını içerir: ifade gruplama, karar verme (IF), başlangıçta (WHILE, FOR) veya sonunda (DO) tamamlamayı kontrol eden döngüler ve birçok olası seçenekten birini seçme ( DEĞİŞTİRMEK). (Bu özelliklerin tümü, biraz farklı bir sözdizimiyle de olsa BCPL'de sağlandı; bu dil, birkaç yıl sonra gelecek yapılandırılmış programlama modasını öngörüyordu). C dilinin işaretçileri ve aritmetiği ele alma yeteneği vardır. Bağımsız değişkenler, bağımsız değişkenin değeri kopyalanarak işlevlere iletilir ve çağrılan işlev, çağıran programdaki gerçek bağımsız değişkeni değiştiremez. "Referansla çağırma" elde etmek istiyorsanız, dolaylı olarak bir işaretçi geçirebilirsiniz ve işlev işaretçinin işaret ettiği nesneyi değiştirebilir. Dizi adları, dizilerin başlangıcı belirtilerek iletilir, bu nedenle dizi türü bağımsız değişkenleri başvuru ile etkin bir şekilde çağrılır.

11 B.V. Kernighan, D.M. Richie. Dil C. 11 Herhangi bir işleve özyinelemeli olarak erişilebilir ve yerel değişkenleri genellikle "otomatik" tir; Her aramada yeniden oluşturulur. Bir fonksiyonun açıklaması başka bir fonksiyonun içinde yer alamaz, ancak değişkenler olağan blok yapısına göre tanımlanabilir. "C" programındaki işlevler ayrı olarak yayınlanabilir. bir işleve ilişkin değişkenler dahili, harici olabilir, ancak yalnızca aynı kaynak dosyada biliniyor veya tamamen global olabilir. Dahili değişkenler otomatik veya statik olabilir. Otomatik değişkenler, daha fazla verimlilik için yazmaçlara yerleştirilebilir, ancak yazmaç bildirimi yalnızca derleyici için bir ipucudur ve belirli makine yazmaçları ile ilgisi yoktur. C, Pascal veya Algol 68 anlamında güçlü bir şekilde yazılmış bir dil değildir. Veri dönüştürme konusunda nispeten yumuşaktır, ancak PL / 1'in çılgın kolaylığıyla veri türlerini otomatik olarak dönüştürmez. Mevcut derleyiciler, dizi dizinleri, bağımsız değişken türleri vb. İçin herhangi bir çalışma zamanı denetimi sağlamaz. Güçlü tip kontrolünün istendiği durumlarda, derleyicinin özel bir versiyonu kullanılır. Bu programa LINT denir, çünkü sizin programınızdan tüy parçalarını seçer. LINT programı makine kodu üretmez, ancak derleme ve yükleme zamanında kontrol edilebilen programın tüm yönlerini çok sıkı bir şekilde kontrol eder. Tür uyumsuzluklarını, bağımsız değişken uyumsuzluklarını, kullanılmayan veya görünüşte başlatılmamış değişkenleri, olası taşınabilirlik sorunlarını vb. Tanımlar. LINT'ten güvenli bir şekilde geçen programlar için, tip hatalarının olmaması, örneğin ALGOL-68'de yazılan programlarla yaklaşık olarak aynı eksiksizlikle garanti edilir. LINT programının diğer özellikleri, uygun olduğunda not edilecektir. Son olarak, diğer diller gibi "C" nin de sakıncaları vardır. Bazı operasyonların kıdemi düşüktür; sözdiziminin bazı bölümleri daha iyi olabilirdi; küçük ayrıntılarda farklılık gösteren birkaç dil sürümü vardır. Bununla birlikte, "C" dili, çok çeşitli programlama uygulamaları için son derece verimli ve ifade edici bir dil olarak kendini kanıtlamıştır. Kitabın içeriği aşağıdaki şekilde düzenlenmiştir. 1. Bölüm, "C" dilinin özüne yönelik eğitici bir giriştir. Hedef, okuyucuyu olabildiğince çabuk çalışır hale getirmektir, çünkü yeni bir dil öğrenmenin tek yolunun o dili kullanarak program yazmak olduğuna kuvvetle inanıyoruz. Ancak bu, temel programlama öğelerinin çalışma bilgisini varsayar; bir bilgisayarın veya derleyicinin ne olduğunu açıklamıyor, N \u003d N + 1 gibi ifadelerin anlamını açıklamıyor. Bununla birlikte, mümkün olduğunda, yararlı bir programlama tekniği göstermeye çalıştık. Bu kitap, veri yapıları ve algoritmalar için bir başvuru kılavuzu olarak tasarlanmamıştır; bir seçim yapmak zorunda kaldığımız yerde, dile odaklandık. 2'den 6'ya kadar olan Bölümler, "C" nin çeşitli yönlerini Bölüm 1'den biraz daha detaylı ve biraz daha fazla formalite olarak ele almaktadır, ancak vurgu hala izole edilmiş parçacıklardan ziyade eksiksiz, yararlı programların örneklerini ayrıştırmaya yöneliktir. Bölüm 2, temel veri türlerini, operatörleri ve ifadeleri tartışır. Bölüm 3 kontrol ifadelerini kapsar: IF-ELSE, WHILE, FOR, vb. Bölüm 4, program harici değişkenlerinin, kurallarının işlevlerini ve yapısını kapsar


12 B.V. Kernighan, D.M. Richie. Dil C. 12 belirli eylem alanı açıklaması, vb. Bölüm 5, işaretçileri ve adres aritmetiğini tartışır. Bölüm 6, yapıların ve birliklerin ayrıntılı bir tanımını içerir. Bölüm 7, işletim sistemi için standart bir arabirim sağlayan "C" standart G / Ç kitaplığını açıklar. Bu G / Ç kitaplığı, "C" yi kullanan tüm makinelerde desteklenir, böylece onu girdi, çıktı ve diğer sistem işlevleri için kullanan programlar, bir sistemden diğerine temelde değişmeden taşınabilir. Bölüm 8, "C" programları ile "UNIX" işletim sistemi arasındaki arayüzü açıklar. Vurgu G / Ç, dosya sistemi ve taşınabilirlik üzerinedir. Bu bölümün bazı kısımları "UNIX" işletim sistemine özgü olsa da, UNIX olmayan programcılar, standart kitaplığın bir sürümünün nasıl uygulandığına dair biraz anlayış ve program taşınabilirliği elde etmek için öneriler de dahil olmak üzere, burada yine de yararlı materyaller bulmalıdır. Ek A, "C" dili için bir başvuru kılavuzu içerir. Bu, "C" nin sözdizimi ve anlambiliminin "resmi" ifadesidir ve (herhangi birinin kendi derleyicisi hariç), önceki bölümlerdeki tüm belirsizlikler ve eksiklikler için nihai hakemdir. "C" birçok sistemde uygulanan evrimleşen bir dil olduğundan, bu kitaptaki materyallerin bir kısmı, herhangi bir belirli sistemdeki mevcut gelişme durumuna karşılık gelmeyebilir. Bu tür sorunlardan kaçınmaya ve olası zorluklar konusunda uyarmaya çalıştık. Bununla birlikte, şüpheli durumlarda, çoğu "C" programcısı için ortam olduğundan, genellikle "UNIX" PDP-11 sisteminin durumunu açıklamayı tercih ettik. Ek a aynı zamanda ana sistemlerdeki "C" dili uygulamalarındaki farklılıkları da açıklamaktadır. 1. Eğitim Tanıtımı "C" diline hızlı bir giriş ile başlayalım. Amacımız, dilin temel unsurlarını gerçek programlarda ayrıntılara, resmi kurallara ve istisnalara takılıp kalmadan göstermektir. Bu bölümde dili tamamen veya hatta katı bir şekilde ifade etmeye çalışmıyoruz (elbette verilen örnekler doğru olacaktır). Sizi mümkün olan en kısa sürede yararlı programlar yazabileceğiniz noktaya götürmek istiyoruz ve bunu başarmak için temel konulara odaklanıyoruz: değişkenler ve sabitler, aritmetik, kontrol transfer ifadeleri, fonksiyonlar ve temel girdi ve çıktı. ... İşaretçiler, yapılar, zengin C deyimlerinin çoğu, birkaç kontrol aktarım ifadesi ve sayısız ayrıntı dahil olmak üzere büyük programlar yazmak için çok önemli olan C öğelerinin çoğunu kasıtlı olarak bu bölümün dışında bırakıyoruz. Bu yaklaşımın elbette dezavantajları vardır. En önemlisi, dilin herhangi bir unsurunun tam tanımı tek bir yerde belirtilmemiştir ve açıklamalar, kısalıklarından dolayı yanlış yorumlamaya yol açabilir. Ek olarak, dilin tam gücünü kullanamama nedeniyle, örnekler olabildiğince özlü ve zarif değildir. Ve bu eksiklikleri minimumda tutmaya çalışırken, hala aklımızda tutuyoruz. Diğer bir dezavantaj, sonraki bölümlerin kaçınılmaz olarak bu bölümün bazı kısımlarını tekrar etmesidir. Bu tekrarın can sıkıcı olmaktan çok yardımcı olacağını umuyoruz.


13 B.V. Kernighan, D.M. Richie. Dil C. 13 Her halükarda, deneyimli programcılar bu bölümdeki materyalleri kendi programlama ihtiyaçlarına uyacak şekilde tahmin edebilmelidir. Yeni başlayanlar ayrıca benzer küçük, bağımsız programlar yazmalıdır. Her ikisi de bu bölümü, bölümlerden başlayarak daha ayrıntılı açıklamalar asmak için bir çerçeve olarak kullanabilir. Başlarken Yeni bir programlama dili öğrenmenin tek yolu, içine program yazmaktır. Yazılacak ilk program tüm diller için aynıdır: HELLO, WORLD kelimeleri yazdırın. Bu en önemli engeldir; bunun üstesinden gelmek için, kodu bir yerden alabilmeli, başarıyla derlemelisiniz, yükleyebilmeli, çalıştırabilmeli ve çıktınızın nerede bittiğini bulabilmelisiniz. Bu teknik ayrıntılarla nasıl başa çıkılacağını öğrendikten sonra, gerisi nispeten basittir. "C" dilindeki "MERHABA, DÜNYA" yazdırma programı şuna benzer: MAIN () PRINTF ("HELLO, WORLD \\ N"); Bu programı nasıl atlayacağınız, kullandığınız sisteme bağlıdır. Özellikle, "UNIX" işletim sistemlerinde, kaynak programı ".C" ile biten bir dosyada (örneğin HELLO.C) oluşturmalı ve sonra bunu CC HELLO.C komutuyla derlemelisiniz. bir karakterin eksik olması veya yazım hatası gibi, derleme sessizce devam edecek ve a.out adlı bir yürütülebilir dosya üretilecektir. Komutla çalıştırmak, A.OUT HELLO, WORLD çıktısını verecektir. Diğer sistemlerde, bu kurallar farklı olacaktır; yerel yetkilinize danışın. Egzersiz 1-1. Bu programı sisteminize geçirin. Programın çeşitli bölümlerini dahil etmemeye çalışın ve hangi hata mesajlarını aldığınızı görün. Şimdi programın kendisi için bazı açıklamalar. Herhangi bir "C" programı, boyutu ne olursa olsun, şunu belirten bir veya daha fazla "işlevden" oluşur


14 B.V. Kernighan, D.M. Richie. Dil C. 14 Gerçekleştirilmesi gereken gerçek bilgisayar işlemleri. "C" dilindeki işlevler, Fortran işlevlerine ve rutinlerine ve PL / 1 prosedürlerine, pascal vb. Örneğimizde, bu işlev MAIN'dir. Genelde işlevlere istediğiniz adı verebilirsiniz, ancak MAIN özel bir addır; programınızın yürütülmesi ilk olarak MAIN işlevi ile başlar. Bu, her programın bir yerde MAIN adlı bir işlevi içermesi gerektiği anlamına gelir. MAIN işlevi, belirli eylemleri gerçekleştirmek için genellikle, bazıları aynı programda ve bazıları önceden yazılmış işlevleri içeren kitaplıklarda bulunan diğer işlevlere başvurur. İşlevler arasında veri alışverişi yapmanın bir yolu argümanlardır. İşlev adından sonra gelen parantezler, bağımsız değişken listesini kapsar; burada main, bağımsız değişken içermeyen ve () olarak belirtilen bir işlevdir. Bir işlevi oluşturan ifadeler küme parantezleri içine alınır ve PL / 1 veya BEGIN-END valgol, pascal, vb .'deki DO-END ile benzerdir. Bir işlev, adı belirtilerek ve ardından parantez içine alınmış bir argüman listesi ile çağrılır. Fortran veya PL / 1 gibi CALL ifadeleri yoktur. İşlevin argümanı olmadığında da parantezler bulunmalıdır. String PRINTF ("MERHABA, DÜNYA \\ N"); simenemprintf işlevini "merhaba, WORLD \\ N" bağımsız değişkeni ile çağıran bir işlev çağrısıdır. PRINTF işlevi, çıktıyı terminale yazdıran bir kitaplık işlevidir (başka bir hedef belirtilmedikçe). Bu durumda, işleve argüman olarak bir karakter dizisi yazdırılır. Çift tırnak işareti "..." içine alınmış herhangi bir sayıda karakter dizisine "karakter dizesi" veya "dize sabiti" denir. Şimdilik, PRINTF ve diğer işlevlere argüman olarak sadece karakter dizilerini kullanacağız. Yukarıdaki satırdaki \\ N dizisi, terminale bir sonraki satırın sol kenarına hareket etmesini söyleyen "satırsonu" karakterinin "C" gösterimidir. \\ N (yararlı bir deney) eklemezseniz, çıktınızın bir terminal satır sonu ile bitmediğini göreceksiniz. \\ N dizisini kullanmak, PRINTF işlevinin bağımsız değişkenine yeni satır karakteri eklemenin tek yoludur; PRINTF ("HELLO, WORLD") gibi bir şey denerseniz; daha sonra "C" derleyicisi, eksik alıntılar için kötü niyetli teşhis mesajları yazdıracaktır. PRINTF işlevi otomatik satır sonları sağlamaz, bu nedenle ona yapılan birden çok çağrı, adım adım çıktı satırı oluşturmak için kullanılabilir. Aynı çıktıyı yazdıran ilk programımız, tıpkı şu şekilde yazılabilirdi:


15 B.V. Kernighan, D.M. Richie. Dil C. 15 MAIN () PRINTF ("HELLO,"); PRINTF ("DÜNYA"); PRINTF ("\\ N"); \\ N'nin yalnızca bir karakteri temsil ettiğini unutmayın. \\ N gibi koşullu "diziler", yazdırılması zor veya görünmez karakterleri temsil etmek için genel ve genişletilebilir bir mekanizma sağlar. Diğer karakterlerin yanı sıra, "C" dili şunları içerir: sekmeler için \\ t, geri boşluk için \\ B, çift tırnak işaretleri için \\ "ve ters eğik çizgi için \\\\. Egzersiz 1-2. Bulmak için deney yapın PRINTF işlevinin bağımsız değişkeni olan satır \\ X içeriyorsa ne olur, burada X, yukarıdaki listede yer almayan bir karakterdir Değişkenler ve aritmetik Aşağıdaki program, aşağıdaki Fahrenheit sıcaklıkları tablosunu ve bunların santigrat Santigrat eşdeğerlerini formülü kullanarak yazdırır C \u003d (5/9) * (F-32) Şimdi programın kendisi: / * FAHRENHEIT-CELSIUS TABLE İÇİN F \u003d 0, 20, ..., 300 * / MAIN () INT LOWER, UPPER, STEP; FLOAT FAHR YAZDIR , CELSIUS; DÜŞÜK \u003d 0; / * DÜŞÜK SICAKLIK SINIRI TABLOSU * /


16 B.V. Kernighan, D.M. Richie. Dil C. 16 UPPER \u003d 300; / * ÜST SINIR * / ADIM \u003d 20; / * ADIM BOYUTU * / FAHR \u003d DÜŞÜK; WHILE (FAHR<= UPPER) CELSIUS = (5.0/9.0) * (FAHR -32.0); PRINTF("% 4.0F %6.1F\N", FAHR, CELSIUS); FAHR = FAHR + STEP; Первые две строки /* PRINT FAHRENHEIT-CELSIUS TABLE FOR F = 0, 20,..., 300 */ являются комментарием, который в данном случае кратко поясняет, что делает программа. Любые символы между /* и */ игнорируются компилятором; можно свободно пользоваться комментариями для облегчения понимания программы. Комментарии могут появляться в любом месте, где возможен пробел или переход на новую строку. Вязыке"C" все переменные должны быть описаны до их использования, обычно это делается в начале функции до первого выполняемого оператора. Если вы забудете вставить описание, то получите диагностическое сообщение от компилятора. Описание состоит из типа и списка переменных, имеющих этот тип, как в INT LOWER, UPPER, STEP; FLOAT FAHR, CELSIUS; Тип INT означает, что все переменные списка целые; тип FLOAT предназначен для чисел с плавающей точкой, т.е. для чисел, которые могут иметь дробную часть. Точность как INT, TAK и FLOAT зависит от конкретной машины, на которой вы работаете. На PDP-11, например, тип INT соответствует 16-битовому числу со знаком, т.е. числу, лежащему между и Число типа FLOAT это 32-битовое число, имеющее около семи значащих цифр и лежащее в диапазоне от 10е-38 до 10е+38. Вглаве2 приводится список размеров для других машин. Вязыке"C" предусмотрено несколько других основных типов данных, кроме INT и FLOAT: CHAR символ один байт SHORT короткое целое LONG длинное целое DOUBLE плавающее с двойной точностью Размеры этих объектов тоже машинно-независимы; детали приведены в главе 2. Имеются также массивы, структуры и объединения этих основных типов, указатели на них и функции,которые их возвращают; со всеми ними мы встретимся в свое время.


17 B.V. Kernighan, D.M. Richie. Dil C. 17 Aslında, sıcaklık dönüştürme programındaki hesaplamalar, LOWER \u003d 0 atama operatörleriyle başlar; ÜST \u003d 300; ADIM \u003d 20; FAHR \u003d DÜŞÜK; değişkenlere başlangıç \u200b\u200bdeğerlerini verir. her bir ifade noktalı virgülle biter. Tablodaki her satır aynı şekilde hesaplanır, bu nedenle her satırda bir kez tekrar eden bir döngü kullanırız. WHILE ifadesinin amacı budur: WHILE (FAHR<= UPPER)... проверяется условие в круглых скобках. Если оно истинно (FAHR меньше или равно UPPER), то выполняется тело цикла (все операторы, заключенные в фигурные скобки и). Затем вновь проверяется это условие и, если оно истинно, опять выполняется тело цикла. Если же условие не выполняется (FAHRпревосходит UPPER), цикл заканчивается и происходит переход к выполнению оператора, следующего за оператором цикла. Так как в настоящей программе нет никаких последующих операторов, то выполнение программы завершается. Тело оператора WHILE может состоять из одного или более операторов, заключенных в фигурные скобки, как в программе перевода температур, или из одного оператора без скобок, как, например, в WHILE (I < J) I=2*I; В обоих случаях операторы, управляемые оператором WHILE, сдвинуты на одну табуляцию, чтобы вы могли с первого взгляда видеть, какие операторы находятся внутри цикла. Такой сдвиг подчеркивает логическую структуру программы. Хотя в языке "C" допускается совершенно произвольное расположение операторов в строке, подходящий сдвиг и использование пробелов значительно облегчают чтение программ. Мы рекомендуем писать только один оператор на строке и (обычно) оставлять пробелы вокруг операторов. Расположение фигурных скобок менее существенно; мы выбрали один из нескольких популярных стилей. Выберите подходящий для вас стиль и затем используйте его последовательно. Основная часть работы выполняется в теле цикла. Температура по Цельсию вычисляется и присваивается переменной CELAIUS оператором CELSIUS = (5.0/9.0) * (FAHR-32.0);

18 B.V. Kernighan, D.M. Richie. Daha basit görünen 5/9 yerine 5.0 / 9.0 ifadesini kullanmanın nedeni, C de, diğer birçok dilde olduğu gibi, tam sayıları böldüğünde, sonucun kesirli kısmının atılmasından oluşan kesmenin meydana gelmesidir. Dolayısıyla, 5/9 işleminin sonucu sıfırdır ve tabii ki bu durumda tüm sıcaklıklar sıfıra eşit olacaktır. Sabitteki ondalık nokta bunun kayan nokta türünde olduğunu gösterir, bu nedenle istediğimiz gibi 5.0 / 9.0 eşittir.FAHR değişkeni FLOAT türünde olmasına rağmen 32 yerine 32.0 yazdık, tamsayı 32 otomatik olarak çıkarılmadan önce FLOAT'a (32.0'da) dönüştürülür. Stil açısından, tamsayı değerlerine sahip olsalar bile, kayan sabitleri açık bir ondalık nokta ile yazmak akıllıca olacaktır; bu, izleyiciye yüzen doğasını vurgular ve derleyicinin olaylara sizin yaptığınız gibi bakmasını sağlar. Tam sayıların ne zaman kayan noktaya dönüştürüldüğüne ilişkin ayrıntılı kurallar Bölüm 2'de verilmiştir. Şimdilik, atama testinin FAHR \u003d LOWER olduğunu unutmayın; WHILE (FAHR<= UPPER) работают, как ожидается, перед выполнением операций целые преобразуются в плавающую форму. Этот же пример сообщает чуть больше о том, как работает PRINTF. Функция PRINTF фактически является универсальной функцией форматных преобразований, которая будет полностью описана в главе 7. Ее первым аргументом является строка символов, которая должна быть напечатана, причем каждый знак % указывает, куда должен подставляться каждый из остальных аргументов /второй, третий,.../ и в какой форме он должен печататься. Например, воператоре PRINTF("%4.0F % 6.1F\N", FAHR, CELSIUS); спецификация преобразования %4.0F говорит, что число с плавающей точкой должно быть напечатано в поле шириной по крайней мере в четыре символа без цифр после десятичной точки. спецификация %6.1F описывает другое число, которое должно занимать по крайней мере шесть позиций с одной цифрой после десятичной точки, аналогично спецификациям F6.1 в фортране или F(6,1) в PL/1. Различные части спецификации могут быть опущены: спецификация %6F говорит, что число будет шириной по крайней мере в шесть символов; спецификация %2 требует двух позиций после десятичной точки, но ширина при этом не ограничивается; спецификация %F говорит только о том, что нужно напечатать число с плавающей точкой. Функция PRINTF также распознает следующие спецификации: %D для десятичного целого, %о для восьмеричного числа, %х для шестнадцатиричного, %с для символа, %S для символьной строки и %% - для самого символа %. Каждая конструкция с символом % в первом аргументе функции PRINTF сочетается с соответствующим вторым, третьим, и т.д. Аргументами; они должны


19 B.V. Kernighan, D.M. Richie. Dil S. 19 sayı ve tür olarak tutarlı olmak için; aksi takdirde anlamsız sonuçlar alırsınız. Bu arada, PRINTF işlevi "C" dilinin bir parçası değildir; G / Ç işlemleri kendi dilinde "C" olarak tanımlanmamıştır. PRINTF işlevinin gizemli hiçbir yanı yoktur; bu basitçe, genellikle "C" programlarında bulunan standart alt yordam kitaplığının bir parçası olan kullanışlı bir işlevdir. Dilin kendisine odaklanmak için Bölüm 7'ye kadar G / Ç üzerinde ayrıntılı olarak durmayacağız. Özellikle, o zamana kadar biçimlendirilmiş girdiyi erteleyeceğiz. Sayı girmeniz gerekiyorsa, bölüm 7, bölüm 7.4'teki TARAMA işlevinin açıklamasını okuyun. TARAMA işlevi, birçok yönden PRINTF işlevine benzer, ancak giriş verilerini okur ve çıktı verilerini yazdırmaz. Egzersiz 1-3. Sıcaklık dönüştürme programını, tablonun başlığını yazdıracak şekilde dönüştürün. Egzersiz 1-4. Uygun Celsius - Fahrenheit dönüştürme tablosunu yazdırmak için programlar yazın FOR İfadesi Tahmin edebileceğiniz gibi, her programı yazmanın birçok farklı yolu vardır. Sıcaklık dönüştürme programının şu sürümünü ele alalım: MAIN () / * FAHRENHEIT-CELSIUS TABLE * / INT FAHR; İÇİN (FAHR \u003d 0; FAHR<=300;FAHR=FAHR+20) PRINTF("%4D %6.1F\N", FAHR, (5.0/9.0)*(FAHR-32.0)); Эта программа выдает те же самые результаты, но выглядит безусловно подругому. Главное изменение исключение большинства переменных; осталась только переменная FAHR, причем типа INT (это сделано для того, чтобы продемонстрировать преобразование %D вфункцииprintf). Нижняя и верхняя границы и размер щага появляются только как константы в операторе FOR, который сам является новой конструкцией, а выражение, вычисляющее температуру по цельсию, входит теперь в виде третьего аргумента функции PRINTF, а не в виде отдельного оператора присваивания. Последнее изменение является примером вполне общего правила языка "C" в любом контексте, в котором допускается использование значения переменной некоторого типа, вы можете использовать выражение этого типа. Так как третий аргумент функции PRINTF должен иметь значение с плавающей точкой, чтобы соответствовать спецификации %6.1F, то в этом месте может встретиться любое выражение плавающего типа. Сам оператор FOR это оператор цикла, обобщающий оператор WHILE. Его функционирование должно стать ясным, если вы сравните его с ранее описанным


20 B.V. Kernighan, D.M. Richie. Dil C. 20 WHILE operatörü ile. FOR ifadesi, virgülle ayrılmış üç bölümden oluşur. FAHR \u003d 0 olan noktanın ilk bölümü, döngünün kendisine girmeden önce bir kez yürütülür. İkinci bölüm, döngüyü kontrol eden kontrol veya koşuldur: FAHR<= 300 это условие проверяется и, если оно истинно, то выполняется тело цикла (в данном случае только функция PRINTF). Затем выполняется шаг реинициализации FAHR =FAHR + 20 и условие проверяется снова. цикл завершается, когда это условие становится ложным. Так же, как и в случае оператора WHILE, тело цикла может состоять из одного оператора или из группы операторов, заключенных в фигурные скобки. Инициализирующая и реинициализирующая части могут быть любыми отдельными выражениями. Выбор между операторами WHILE и FOR произволен и основывается на том, что выглядит яснее. Оператор FOR обычно удобен для циклов, в которых инициализация и реинициализация логически связаны и каждая задается одним оператором, так как в этом случае запись более компактна, чем при использовании оператора WHILE, а операторы управления циклом сосредотачиваются вместе в одном месте. Упражнение 1-5. Модифицируйте программу перевода температур таким образом, чтобы она печатала таблицу в обратном порядке, т.е. От 300 градусов до Символические константы Последнее замечание, прежде чем мы навсегда оставим программу перевода температур. Прятать "магические числа", такие как 300 и 20, внутрь программы это неудачная практика; они дают мало информации тем, кто, возможно, должен будет разбираться в этой программе позднее, и их трудно изменять систематическим образом. К счастью в языке "C" предусмотрен способ, позволяющий избежать таких "магических чисел". Используя конструкцию #DEFINE, вы можете в начале программы определить символическое имя или символическую константу, которая будет конкретной строкой символов. Впоследствии компилятор заменит все не заключенные в кавычки появления этого имени на соответствующую строку. Фактически это имя может быть заменено абсолютно произвольным текстом, не обязательно цифрами #DEFINE LOWER 0/* LOWER LIMIT OF TABLE */ #DEFINE UPPER 300 /* UPPER LIMIT */ #DEFINE STEP 20 /* STEP SIZE */



Ders 2 Fishing S.A., Shkatova G.I. C ++ Dersleri Temel Veri Türleri Bir program tarafından işlenen veriler için ana depolama özelliği bellek hücreleridir. Tüm bilgisayar belleği homojendir ve

1 Ders 5 1.1 Numaralandırılmış Türler C dili, numaralandırılmış türleri tanımlamak için olanaklara sahiptir. Genel olarak, numaralandırılmış türlerin bildirimi şu şekilde görünür: örneğin, enum (

Laboratuvar çalışması 1 İşin amacı: C dilinin temel sözdizimsel yapılarıyla nasıl çalışılacağını öğrenmek. Döngüleri düzenleyebilir, hesaplamalar yapabilir. 1. KURAMSAL BÖLÜM 1.1. Değişkenler ve türleri

UKRAYNA DİREKSİYON VISCHANE KURULUŞ VE BİLİM BAKANLIĞI "ZAPORIZKY ULUSAL ÜNİVERSİTESİ"

Ders 2 Kurs: "Android tabanlı mobil cihazlar için uygulamaların geliştirilmesi" Konu: Değişkenler, veri türleri, operatörler Plan 1. Veri türleri 2. Değişkenler. Sabitler ve Değişmezler 3. Operatörler 1. Kavram

Bütün sayılar. Bitsel işlemler Shokurov Anton V. [email protected] 16 Şubat 2017 Sürüm: 0.12 Özet Tamsayıların kendine özgü özellikleri vardır. Tamsayı aritmetiğinde olduğu gibi

Nesne Pascal Dil alfabesi Dilin sözcük yapısı Hücre Değer Sabit Değişken Atama operatörleri Tür sistemi Aritmetik ifadeler Boole ifadeleri Dize ifadeleri Nesne

Konu 5. Program yapısı, ifadeler, işlemler, operatörler 5.1. Programın yapısı. Delphi geliştirme ortamındaki programlar, modüler yerleşim ilkeleri üzerine inşa edilmiştir. Modül çevrimdışı derlendi

Laboratuvar çalışması 3 Konu: Bir C programının yapısı. Girdi-çıktı fonksiyonları. Laboratuvar çalışmasının ilerlemesi rapora yansıtılmalıdır. Rapor bir başlık sayfası, iş numaraları, kodlar içermelidir

Krasnodar Bölgesi 2014'te Birleşik Devlet Sınav Bilişim ve BİT sonuçlarına ilişkin analitik rapor. 2015 Önerileri Bilişim ve BİT Alanında Birleşik Devlet Sınavının 2014'teki genel sonuçları. Bölge Sınavı geçmeyen mezunların yüzdesi

46 V.L. Tarasov C ++ 'da programlama üzerine dersler Ders 3 Program yapısı, kontrol 3.1. Program yapısı Bir C ++ programı, fonksiyonlardan ve değişkenlerden oluşur. Herhangi bir programın işlevleri arasında

Laboratuvar çalışması 3 Döngüsel algoritmaların programlanması Çalışmanın amacı: Microsoft Visual Studio 2010 sistemiyle çalışmanın pratik becerilerini pekiştirmek, çeşitli operatörlerin nasıl doğru şekilde kullanılacağını öğrenmek

İÇİNDEKİLER GİRİŞ 15 C ++ ile programlamaya yeni bir yaklaşım 15 Kitabımız hem yeni başlayanlar hem de deneyimli programcılar için yararlıdır 15 Soyutlama 16 Materyal kapsamı 16 Deneyimli C- ve

İçindekiler Giriş 16 Bu Kitap Hakkında 16 Dahil Edilen CD 16 Kitapta Kullanılan C ++ Nedir 17 Kurallar 17 Bu Kitap Nasıl Düzenlenmiştir 18 Ve Daha Fazlası ... 18 Bölüm I. C ++ ile Başlarken 18

Bölüm 2. Dilin kontrol operatörleri Programlama teorisinde, herhangi bir karmaşıklıktaki bir problemi çözmek için bir programın sadece ardışık, dallanma ve döngü adı verilen üç yapıdan oluşabileceği kanıtlanmıştır.

Konu 1.3 C Tipi dönüştürme işlemlerinde açık ve kapalı. Aritmetik işlemler. Atama işlemlerinde dönüştürme yazın. Boole işlemleri. Tekli ve çiftli işlemler. Adreslenebilir

DERS 4. VERİ TÜRLERİ Türler hakkında genel bilgiler ... 1 Değişken tür bildirimlerinin eksikliği ... 2 Otomatik tür dönüştürme ... 3 Basit türler ... 3 Tam sayılar ... 3 Çift kayan noktalı sayılar

1 Ders 7 1.1 İfadelerin değerlendirilmesi C dilindeki ifadelerin değerlendirilmesinin bazı özelliklerini ele alalım. 1.1.1 İfadeleri değerlendirirken tür dönüştürmeleri Aritmetik işlemleri değerlendirmeden önce, çevirmen

İçindekiler ÖNSÖZ ... 6 Bölüm 1 TEMEL DİL KAVRAMLARI ... 10 1.1. Alfabe, tanımlayıcılar, hizmet kelimeleri ... 11 1.2. Yazılar ... 14 1.3. Değişkenler ve İsimli Sabitler ... 21 1.4. İşlemler ... 30

Konu: C (C) SWITCH, BREAK, FOR, WHILE, DO WHILE, CONTINUE, alıştırmalar ile tanışma İçindekiler: SWITCH BREAK FOR WHILE WHILE DO WHILE CONTINUE alıştırmaları SWITCH ifadesi Switch deyimi organize etmek için tasarlanmıştır

Konu 1.1 C dilinde temel türler ve veri kümeleri C programlama dili aşağıdaki veri türlerini içerir: Tip Bit cinsinden tipik boyut -127'den 12'ye kadar minimum izin verilen char 8 değeri aralığı

Http://compscicenter.ru 1/21 Ders 2. C ++ 'daki programlar nasıl yürütülür Alexander Smal CS center 15 Eylül 2016 St. Petersburg http://compscicenter.ru 2/21 Veri türleri Tamsayı: 1. karakter (karakter

8. * Yapısal programlama 8.1. Yapısal programlama hakkında genel bilgiler 8.1.1. Program ve alt program Programlama, geçen yüzyılın ortalarından beri yoğun bir şekilde gelişmekte ve küre haline gelmektedir.

Laboratuvar çalışması 7 С / С ++ dizgeleri 1. İşin amacı: 1) Dizelerle çalışırken pratik beceriler kazanmak 2) Dizeleri fonksiyonlara aktarırken pratik beceriler kazanmak. 2. Kısa teorik bilgi

Programlama teknolojileri Kış-Bahar Dersi 9 Ternovoi Maxim Yurievich Ph.D., kıdemli araştırmacı, Bilgi ve Telekomünikasyon Ağları Bölümü'nde doçent. Derste tartışılan konular 1. Özel (özel) unsurlar

2.5.3 Operatörler Java dili, programcıya ifadelerin oluşturulması ve değerlendirilmesi üzerinde tam kontrol sağlayan kapsamlı bir operatör seti sağlar. Çoğu operatörün üyesi

Konu 1.1 Skaler veri dizileri C ++ 'da Diziler Bir dizi, tek bir isim altında birleştirilmiş, aynı tipteki bir hücre grubu olarak sunulan bir veri yapısıdır. Diziler büyük işlemek için kullanılır

Pratik ders Konusu: Programlama ortamı. Çalışmanın amacı: Pascal dilinin ve atama operatörünün çeşitli veri türlerini incelemek için, doğrusal bir algoritmanın uygulanması için en basit programları nasıl oluşturacağınızı öğrenin.

Makale İnternetten Radiocote'da bir yerden alınmıştır.Bu makale, HD44780 denetleyicide popüler LCD'lerle çalışma tekniklerinde ustalaşmaya başlamaya karar verenlerin görevini kolaylaştırmak için benim tarafımdan yazılmıştır. "Live" ile çalıştım

FGBU VPO "SibSUTI" Bilgisayar Sistemleri Bölümü PROGRAMLAMA PROGRAMLAMA DİLLERİ Veri dizileri Öğretim Görevlisi: Silahlı Kuvvetler Bölümü Doçenti, Ph.D. Polyakov Artem Yurievich Bilgisayar Sistemleri Bölümü FGOBU

KONU 5. KOŞULLU OPERATÖRLER (ŞUBE OPERATÖRLERİ) Mantıksal işlemler ... 1 Karşılaştırma operatörleri ... 3 İşlemlerin önceliği ... 5 If - else ifadesi ... 5 If ifadesinin söz dizimi: ... 5 Üçlü operatör?

İşlevler İşlevler, farklı veri değerleri üzerinde aynı işlemleri gerçekleştirmenize izin veren kod bloklarıdır. Fonksiyonlar bir kez tanımlanır ve uygulamanın herhangi bir yerinden çağrılabilir.

E. V. Denisova, S. V. Rakov, St. Petersburg SI dilinde programlama; SPb GITMO (TU), 2003.74s. Kılavuz, algoritmik C dilinde programlama için temel bilgiler sağlar. Birçok örnek

VARIANT 1 1. BASIC ve FORTRAN programlama sistemlerinde veri türlerini, sabitleri ve kullanıcı tanımlı veri türlerini tanımlayan operatörler. 2. Verilen bir öğenin elemanlarının ortalama değerini bulmak için bir program yazın.

LABORATUVAR ÇALIŞMASI 3. BASH SENARYOLARININ YAZILIMI. İŞİN AMACI Bash script yorumlayıcısıyla pratik bir tanışma. Komut dosyası dilinin temel sözdizimi. BASH SENARYOLARI Parametreler ve Değişkenler Parametre Kavramı

Laboratuvar çalışması 0 Döngüsel bir yapının algoritmaları İşin amacı: C dilini kullanarak döngüsel bir yapının algoritmalarını oluşturmada pratik beceriler kazanmak İçindekiler Kısa teorik bilgiler ...

RUSYA FEDERASYONU EĞİTİM VE BİLİM BAKANLIĞI Devlet Özerk Eğitim Kurumu Yüksek Öğretim "MİLLİ ARAŞTIRMA TOMSK POLİTEKNİK ÜNİVERSİTESİ" Genel

İşlem Durumu Programın, yükleme modülü adı verilen tek, bağımsız bir nesneye önceden monte edildiğini varsayalım. Bazı işletim sistemlerinde, program yükleme anında çok sayıda

Ders 4 JAVA'da Operatörler Klavyeden bilgi girme Klavyeden sayı girmenin en kolay yolu Tarayıcı sınıfını kullanmaktır. Bu sınıf, java.util paketine aittir. Dolayısıyla kullanmak için

2 UYGULAMALAR İÇİN GÖRSEL TEMELİNE GİRİŞ Bilişim 2 dönem Ders planı 1. Makrolar ve VBA 2. VBA'nın nesneye yönelik yönleri 3. Değişkenler ve veri türleri 4. Dallar 5. Döngüler 6. Fonksiyonlar 7.

Konu 9. Türler. Yapılandırılmış tipler. Object Pascal'ın dört yapılandırılmış türü vardır: diziler, kayıtlar, kümeler ve dosyalar. Yapılandırılmış türlerden herhangi biri, çok sayıda

Linux işletim sistemi Ders 10 Veri işleme dili AWK AWK ("meşe" okuyun) - bir giriş akışının satır satır ayrıştırılması ve işlenmesi için yorumlanmış C benzeri komut dosyası dili (örneğin, bir metin dosyası)

RUSYA FEDERASYONU EĞİTİM VE BİLİM BAKANLIĞI Federal Devlet Yüksek Öğretim Bütçe Eğitim Kurumu "Gagarin'in adını taşıyan Saratov Devlet Teknik Üniversitesi

Anlatım 2 Çatallama algoritmaları. Döngüsel algoritmalar. İfadeler Programlama, Sayısal Yöntemler ve Bilişim Alexander Valerievich Pozdneev Bilimsel Araştırma Otomasyon Fakültesi Bölümü

Laboratuvar çalışması 2 Dallanma algoritmalarının programlanması İşin amacı: koşullu if ifadesinin nasıl doğru kullanılacağını öğrenmek; dallanma algoritmaları için problemleri çözmek için programların nasıl oluşturulacağını öğrenin.

Hafıza Tahsisi Hafıza tahsisi, kaynak programın münferit elemanlarına tahsis için gerekli hafıza alanının adresi, boyutu ve özniteliklerinin atandığı işlemdir.

Programlama dilleri ve çeviri yöntemleri Giriş 1 Programlama dilleri aralığı 2 En büyük ortak bölen İlk başta, programlar şu şekilde yazılmıştır: Örnek (x86 için n.d hesaplama programı) 55 89 e5 53 83

RUSYA FEDERASYONU EĞİTİM VE BİLİM BAKANLIĞI Yüksek Öğretim Devlet Özerk Eğitim Kurumu "MİLLİ ARAŞTIRMA TOMSK POLİTEKNİK ÜNİVERSİTESİ"

Lab 3. Altyordamlar ve yığın. İşlemci komut döngüsü. Amaç: Alt yordamların uygulanması. Mikroyapı çalışmalarının incelenmesi. Alt yordamlar ve yığın Bölüm 1. Programlamada, genellikle durumlar meydana gelir

3. Mimarinin Etkisi Bilgisayar yapısı 1. Veriler; 2. Temel işlemler; 3. Eylem dizisinin yönetimi; 4. Verilere erişim; 5. Bellek yönetimi; 6. İşletim ortamı. 2 Veri Depolama:

Çalışmanın amacı Lab 7 BASH'TA YAZMA TEMELLERİ Kabuk komut dosyası yazmada ilk pratik becerileri edinin. 1. Teorik bilgiler 1.1. Takımları gruplama. Komut Komut Dosyaları

Dennis Ritchie, C programlama dilinin yaratıcısıdır. UNIX işletim sistemini yaratmak için Ken Thompson ile C'yi geliştirdi. Brian Kernighan, “Newton'un omuzlarında duran devlerle ilgili bir sözü var” diyor. "Hepimiz Dennis'in omuzlarındayız."

Bir programlama efsanesi olan Rob Pike Wired'a "Web'deki hemen hemen her şey C ve UNIX üzerine inşa edilmiştir" dedi. - "Tarayıcılar C dilinde yazılmıştır. UNIX çekirdeği neredeyse tüm İnternet'e güç sağlar ve aynı zamanda C'de yazılmıştır. Web sunucuları C'de yazılır. İçinde yoksa Java veya C ++ 'da yazılır. Ve bu diller C'den türetilmiştir. Python ve Ruby de C tabanlıdır. Tüm ağ ekipmanlarının C'de yazılmış programlarda çalıştığına kefil oldum. Günümüz bilgi ekonomisindeki her şeyin ne kadarının Dennis'in çalışmasına dayandığını abartmak gerçekten zor. "

"Windows'un bir zamanlar C'de yazılmış olması boşuna değil," diye ekliyor. Ve UNIX, Apple'ın masaüstü işletim sistemi, Mac OS X ve IOS'un kalbindedir. Bu sistemler iPhone ve iPad'de yüklüdür. "

Profesyönel geliştirme

Dennis MacAlistair Ritchie 9 Eylül 1941'de doğdu. Memleketi Bronxville, New York'tur. Dennis çocukluğunu New Jersey'de geçirdi. Prestijli Amerikan üniversitesi Harvard'dan mezun oldu. Genç mühendis, özellikle yerel bilgisayar sistemi Univac I ile ilgileniyordu. Orada fizik ve uygulamalı matematik alanında lisans derecesi aldı. Mezun olduktan sonra Ritchie, MIT Enstitüsü'ndeki bilgisayar laboratuvarında laboratuvar asistanı olarak işe girdi. Orada araç filosunun bakımını yapmanın yanı sıra yazılım geliştirmeye de dahil oldu.

Aynı zamanda, daha kompakt masaüstü bilgisayarlar için işletim sistemleri geliştirmekle ilgilenmeye başladı. (O zamanlar, "standart boyutlu" bilgisayarlar tüm odaları işgal ediyordu). MIT ve General Electric projesine destek verdi. Yazılım mühendisliği eğitimi almamış olmasına rağmen, programlama Dennis için hiçbir zaman sorun olmamıştır. Program yazmak onun için bir bulmaca çözmek gibiydi.

1967'de Ritchie, bugüne kadarki en ünlü bilgisayar icatlarının temelinin oluşturulduğu Bell Labs'da çalışmaya başladı. Ancak o sırada Bell Labs, ülkenin önde gelen TV sağlayıcısıydı.


Bell laboratuvarları

Bell Laboratuvarlarından başlayarak, Ritchie herhangi bir projeye odaklanmadı: “Sadece farklı geçmişlere ve birçok fikre sahip insanların etrafında olmak istedim. Bu yüzden meslekte yolumu bulmak için aynı anda birkaç proje üzerinde çalışmaya başladım. "

Şirkette Dennis, 1966'da Bell Labs'a bir yıl önce katılan Kenneth Thomson ile çalışmaya başladı. Her ikisi de "minyatür" masaüstü bilgisayarların 1970'lerin başında daha fazla popülerlik kazanacağını fark etti. Ayrıca, bu tür bilgisayarların, bilgisayarın donanımını yönetmek, dosyaları yönetmek, uygulama programlarını çalıştırmak ve verileri girdi ve çıktı almak için bir mekanizmaya ihtiyacı olduğuna karar verdiler.

Geliştiriciler bir işletim sistemi fikrini bu şekilde buldular. Web'e göre, Ken Thompson ile birlikte C dilinin icadı ve Ritchie'nin UNIX geliştirmedeki rolü, onu modern hesaplamanın öncüsü yaptı.

UNIX ve C

Her şey 1963'te, Ritchie'nin Bell Labs'a gelmesinden çok önce başladı - MAC (Çoklu Erişim Bilgisayarı, Makine Destekli Biliş, İnsan ve Bilgisayar) projesiyle, MIT'de tamamen bir araştırma projesi olarak başladı.

MAC projesi çerçevesinde CTSS (Uyumlu Zaman Paylaşım Sistemi) işletim sistemi geliştirildi. 60'ların ikinci yarısında, BBN, DTSS, JOSS, SDC ve Multiplexed Information and Computing Service (MULTICS) gibi birkaç başka zaman paylaşım sistemi oluşturuldu.

Multics, GE-645 bilgisayarı için bir zaman paylaşımlı işletim sistemi oluşturmak için MIT, Bell Telephone Laboratories (BTL) ve General Electric'in (GE) ortak bir geliştirmesidir. Son Multics bilgisayarı 31 Ekim 2000'de kapatıldı.

Ancak BTL, 1969 gibi erken bir tarihte bu projeden ayrıldı.

Ken Thompson ve Dennis Ritchie kendi başlarına çalışmaya devam etmek istedi. Thompson, GE-635'te Uzay Yolculuğu oyunu üzerinde çalıştı. İlk olarak Multics için yazılmış ve daha sonra Fortran'da GE-635'te GECOS altında yeniden yazılmıştır. Oyun, güneş sisteminin gövdelerini simüle etti ve oyuncunun bir gezegene veya uyduya bir yere bir gemi indirmesi gerekiyordu.

Bu bilgisayarın ne yazılımı ne de donanımı böyle bir oyun için uygun değildi. Thompson bir alternatif arıyordu ve oyunu yetim PDP-7 için yeniden yazdı. Hafıza 8K 18-bit kelimelerdi ve o zaman için güzel grafikler çıkarmak için bir vektör görüntüleme işlemcisi de vardı.

Thompson ve Ritchie, GE üzerinde tüm çapraz montaj geliştirmelerini yapıyor ve kodu delikli teybe taşıyorlardı. Thompson bundan aktif olarak hoşlanmadı ve dosya sisteminden başlayarak PDP-7 için işletim sistemini yazmaya başladı. UNIX böyle doğdu.

UNIX çekirdeği assembly dilinde yazılmıştı, ancak çok geçmeden Dennis ve Ken, tüm veriler üzerinde daha fazla kontrol sağlayacak "daha yüksek seviyeli" bir dile ihtiyaç duyduklarını fark ettiler. 1970 civarında, Fortran çekirdeğinin ikinci bir versiyonunu yaratmaya çalıştılar, ancak sonuç beklentilerin altında kaldı. Ritchie daha sonra Thompson'ın B (Bi) olarak bilinen yaratımına dayanan yeni bir dil önerdi.

PDP-7 UNIX ayrıca BCPL dilinden etkilenen yüksek seviyeli B dilinin ortaya çıkmasına neden oldu. Dennis Ritchie, B'nin türler olmadan C olduğunu söyledi. BCPL, 8KB belleğe sığdı ve Thompson tarafından dikkatlice yeniden tasarlandı. B yavaş yavaş S'de büyüdü.


"C Dili" kitabından resim: M. Waite, S. Prata, D. Martin

B yorumlanmış bir dildi - yani kaynak kodu, özel bir program tarafından yürütülürken parçalar halinde makine koduna dönüştürüldü. C derlenmiş bir dildi. Makine koduna çevrildi ve ardından doğrudan CPU üzerinde yürütüldü. Ancak o günlerde C yüksek seviyeli bir dil olarak kabul edildi. Ritchie ve Thompson'a ihtiyaç duydukları daha fazla esnekliği sağladı ve aynı zamanda daha hızlı performans gösterdi.

C dilinin ilk versiyonu, bugün bildiğimiz versiyondan çok farklı değildi. Biraz daha basit olmasına rağmen. Veri yapıları ve değişken "türler" sundu. Ve bu, Ritchie ve Thompson'ın yeni UNIX çekirdeğini oluşturmak için kullandığı şeydi. 10 yıl sonra Bell Labs'a katılan Pike, "Bir program yazmak için C'yi yarattılar" diyor. "Ve yazmak istedikleri programın adı UNIX çekirdeğiydi."

"UNIX gibi büyük bir program yazarken, çeşitli bileşenler arasındaki etkileşimleri yönetmeniz gerekir: kullanıcılar, dosya sistemi, diskler, program yürütme ve bunu etkili bir şekilde yönetmek için, üzerinde çalıştığınız bilgileri iyi anlamanız gerekir. Bunlara veri yapıları diyoruz ”diyor Pike.

Veri yapısı olmayan, UNIX çekirdeği ile aynı yapı ve mükemmelliğe sahip bir çekirdek yazmak çok daha zor olurdu. Tüm verileri gruplamak için bir yola ihtiyaçları vardı ve bu Fortran'da mümkün değildi. "

Bu, o zamanlar bir işletim sistemi yazmanın alışılmadık bir yoluydu ve Ritchie ve Thompson'ın sonunda işletim sistemini 70'lerin sonlarında yaptıkları diğer platformlara taşımasına izin veren buydu. Pike, "UNIX'in herhangi bir platformda çalışması için ağ geçitlerini açtı" diyor. "Bunların hepsi C ile mümkün kılınmıştır."

"Görünmez Kral"

"C programlama dilinin geliştirilmesi ileriye doğru atılmış büyük bir adımdı ve doğru uzlaşmaydı ... C'de doğru denge vardı, yüksek düzeyde yazmanıza olanak tanıdı, bu daha üretken hale geldi ve doğru zamanda olan her şeyi kontrol edebiliyordunuz," diyor Baş Bilim İnsanı Bill Dalli Stanford'da NVIDIA Üyesi ve Bell Mühendislik Profesörü. "[C] onlarca yıldır programlama tonunu belirliyor."

Pike'ın belirttiği gibi, Ritchie'nin C'ye yerleştirdiği veri yapıları, nihayetinde C ++ ve Java gibi modern diller tarafından kullanılan nesneye yönelik paradigmaya yol açtı.

Devrim, 1973'te Ritchie'nin dil üzerine bilimsel çalışmasını yayınladığında başladı ve beş yıl sonra meslektaşı Brian Kernighan ile birlikte bir kitap yayınladı: "C Programlama Dili". Kernighan'ın önceden yazdığı dil kitapları vardı ve bir noktada Dennis'i onunla bir kitap yazmaya ikna etti.

Pike kitabı Toronto Üniversitesi'nde bir öğrenci iken okudu. Hastalık nedeniyle eve döndüğünde kitabı aldı. “Bu el kitabı, yakın zamanda yayınlanan el kitaplarına kıyasla bir açıklık ve açıklık örneğidir. Bu haklı olarak bir klasik ”diyor. "Yatakta hastayken okudum ve hastalığı unutmama neden oldu."

Pek çok üniversite öğrencisi gibi Pike da bu dilde program yapmıştı. Bell Labs UNIX kaynak kodunu dağıtmaya başladığında Xi, üniversite kampüslerine yayıldı. Ek olarak, işletim sistemi modern özgür yazılım hareketinin gelişimine ivme kazandırdı. Pike, Ritchie'nin katkısının abartılamayacağını söylediğinde abartmıyor. Ve Ritchie 1983'te Turing Ödülü'nü ve 1998'de Ulusal Teknoloji Madalyası'nı almasına rağmen, kendisine hala haraç ödenmedi.

Kernighan ve Pike, Ritchie'yi alışılmadık derecede gizemli biri olarak tanımlar. Pike, "20 yıldan fazla bir süredir odanın karşı tarafında çalıştım ve yine de onu iyi tanıdığımı sanmıyorum" diyor.

Steve Jobs aynı zamanda gizli bir insandı ve gizlilik konusundaki konumu yalnızca onu çevreleyen kişilik kültünü güçlendirdi. Ritchie tamamen farklı bir zamanda yaşadı ve Jobs gibilerinden tamamen farklı koşullarda çalıştı. Belki de bu yüzden Ritchie bu kadar popüler değildi.

MIT'de elektrik mühendisliği ve bilgisayar bilimi profesörü ve Bilgisayar Bilimi ve Yapay Zeka Laboratuvarı üyesi olan Martin Rinard, "Jobs görünür kraldı ve Ritchie çoğunlukla görünmez kraldı" dedi.

“Jobs'un dehası, zevkine sahip olması ve insanların kullanmak istediği ürünler yaratmasıydı. Ve insanların gerçekten sevdiği şeyler yaratabilirdi. Ritchie, teknisyenlerin temel altyapıyı oluşturmak için kullanabileceklerini yarattı. Her gün kullansalar bile insanların görmesine gerek yok. "

UNIX'ten sonra

Yazarlarının bakış açısına göre UNIX'in temel sorunu, mimarisi nedeniyle, işletim sisteminin geliştirilmesinden bu yana önemli ölçüde değişen BT dünyasına şeffaf bir şekilde adapte olamamasıydı. Basitçe söylemek gerekirse, UNIX kendi sorunlarından ölüyordu ve onu modern koşullara uyarlamak için yapılan tüm girişimler, işletim sisteminin karmaşıklaşmasına, birçok farklı, karmaşık API'nin, yeni katmanların, ağ protokollerinin, veri formatlarının ortaya çıkmasına neden oldu, bu da bir zamanlar basit, düşünceli, zarif işletim sistemini ağır hale getirdi. beceriksiz ve bir yığın kodla bakımı zor.

UNIX'in başarılarını hatırlayan Ritchie, işletim sistemleri ve programlama dilleri alanındaki araştırmalarına ölümüne kadar devam etti. Plan 9 ve Inferno işletim sistemlerinin yanı sıra Limbo programlama dilinin geliştirilmesine önemli katkılarda bulundu.

Bell Labs araştırmacıları, UNIX'in artık düzeltilemeyeceğini anladıklarında, sıfırdan başlamaya karar verdiler ve eksantrik adı olan Plan 9 ile yeni, ilgisiz ve UNIX ile uyumsuz bir işletim sistemi geliştirdiler.


Plan 9'un ana fikri, "her şey bir dosyadır" kavramını mantıksal bir zafere taşımak ve tüm işletim sistemini sentetik dosyalardan (daha spesifik olarak, işletim sisteminin tüm kaynaklarını dosyalar olarak temsil etmek) oluşturmaktı. Ve bunu yalnızca yerel uygulamaların ve kullanıcıların dosyalara değil, aynı zamanda herhangi bir uzak istemciye de erişebilmesi için yapmak. Sonuç, 9P dosya protokolü oldu.
1995 yılında, Bell Labs'ın yeni sahibi Lucent Technologies, Plan 9 geliştiricilerin çoğunu Plan 9 tabanlı Inferno işletim sistemini kurmak için farklı bir ekibe transfer etti.

Şirketin yönetimi, sebepsiz yere değil, dağıtılmış bir bilgi işlem ağında düzenlenmiş bilgisayarlarda şeffaf ve kolay bir şekilde çalışabilen Plan 9'un, o zamanlar aslanın işlevlerinden payını diğer makinelere devretmek zorunda olan düşük güçlü mobil cihazlarda ve terminallerde mükemmel bir şekilde kendini göstereceğine inanıyordu. optimum performans ve kullanılabilirliği sağlamak için.

Taşınabilirlik ve performansa ek olarak, Inferno'nun çok önemli bir özelliği daha vardır: Özellikle Inferno için sıfırdan geliştirilen ve yalnızca bu işletim sisteminde var olan Limbo uygulama programlama dilinin varlığı. Sözdizimi C'ninkine çok benzer, ancak diğer birçok dille serpiştirilmiştir.

Efsanenin sonu

12 Ekim 2011'de Ritchie, yalnız yaşadığı New Jersey'deki evinde ölü bulundu. İlk ölüm haberi eski meslektaşı Rob Pike tarafından bildirildi: "Dennis Ritchie bu hafta sonu evinde öldü." Ölümün nedeni ve kesin zamanı bilinmiyordu. Bundan kısa bir süre önce prostat kanseri tedavisi gördü ve ayrıca bir kalp sorunu vardı. Ritchie, Steve Jobs'un ölümünden bir hafta sonra öldü, ancak Jobs'un aksine, Ritchie'nin ölümü medyada çok az yer aldı.