Standart C Programlama Dili


0.1. C Dilinin Kısa Bir Tarihi

unix işletim sistemi ile C programlama dili birbirleriyle yakından ilişkilidir. Tarihleri 1970’lerin başında başlar. İlginç olan şey de, AT&T Bell Laboratuvarları’ndan Ken Thompson tarafından yazılan bir bilgisayar oyun programından kaynaklanmalarıdır. Thompson, programını bir PDP-7 bilgisayarına uyarlamak istediğinde, bu küçük makine hakkında çok şey öğrendi, ancak işletim sistemini pek beğenmedi. Bunun üzerine, o zamanlar daha büyük bir makinede kullanılan MULTICS işletim sisteminin basitleştirilmiş ve değiştirilmiş bir uyarlamasını yazmaya karar verdi. Daha sonra, Dennis M. Ritchie de ona katıldı ve Brian W. Kernighan tarafından UNICS (Uniplexed Information and Computing Service—Birleştirilmiş Bilgi ve Hesaplama Hizmeti) adı verilen işletim sisteminin ilk uyarlaması doğdu. Bu üç kişi C ve unix’in tarihinde en önemli rolü oynadılar. Başlangıçta, Thompson, daha önceleri 1967 civarında Martin Richards tarafından geliştirilen BCPL adlı tipsiz dilden de büyük ölçüde etkilenerek B dilini tasarımladı. Bundan sonra, Ritchie unix’i daha kolay bir şekilde yazma amacıyla C adında yeni bir dil tasarımladı. 1973 yılında ise Ritchie ve Thompson C’yi kullanarak unix’i yeni baştan yazdılar. Sonuç o kadar iyiydi ki, 1983’te ACM’in Turing Ödülü’nü almaya hak kazandılar.

O zamandan beri, C dilinde çok büyük değişiklikler olmadı. Dilde yapılan bazı küçük genişletmeler, Dennis M. Ritchie tarafından hazırlanan The C Programming Language—Reference Manual (C Programlama Dili—Başvuru Kılavuzu) adlı, 1983 basımlı, Bell Laboratuvarları yayınında anlatıldı. ANSI’nin X3J11 komitesi tarafından 1988 Ekim’inde sunulan, C Standardının bir taslağı bu değişiklikleri resmîleştirdi ve kendi başına yenilerini ekledi. Yapılan düzenlemelerle, birtakım programcı hatalarını azaltmak için derleyici kontrolleri artırıldı ve dile yararlı birkaç özellik daha katıldı. Bu düzenlemelerin sonucunda, pratik olarak birbirinin aynı olan, iki resmî standart, C dili için ilk kez ortaya çıkmış oldu:

  • ANSI/ISO-IEC 9899:1990[1992]: C dili için oluşturulmuş ANSI (yani Amerikan) standardı. Bu doküman resmen American National Standard for Information Systems-Programming Language C (X3.159-1989) dokümanının yerine geçmiştir.
  • International Standard C ISO/IEC 9899:1990(E): C dili için ISO tarafından kabul edilen uluslararası standart.

Yaygın olarak, C89 veya C90 olarak bilinen bu ANSI/ISO standartlaştırma işleminden sonra, aradan geçen on yılda C dili oldukça sabit kaldı; ancak diğer yandan C++ dili gelişmesini sürdürdü. 1995 yılında çıkan bir ara standart ise bazı düzeltmeler ve ufak geliştirmeler sağladı. Buna da kısaca C95 ismi verildi (uzun adı ISO/IEC 9899/AMD1:1995).

1990’ların sonuna gelindiğinde C dilinin ISO standardı bir kez daha ve geniş çapta güncellenerek, kısaca C99 olarak bilinen ISO/IEC 9899:1999 yayımlandı. 2000 yılının Mart’ında ise, C99 olarak bilinen bu yeni standart ANSI tarafından da benimsendi.

2000’li yıllarda yeni C Standardı için çalışmalara devam edildi ve 2011 yılında, yaygın olarak C11 olarak bilinen ve dile yeni özellikler katan bir standart (ISO/IEC 9899:2011) yayınlandı. Ayrıca, 2012 yılında ufak bir hata düzeltmesi (ISO/IEC 9899:2011/Cor 1:2012) yayınlandı.

2018 yılında, sadece teknik bazı düzeltmeler ve açıklamalar içeren C17 standardı (ISO/IEC 9899:2018) yayınlandı. Bu standardı destekleyen derleyicilerle derlenen C programlarında bu durumun test edilebilmesi için __STDC_VERSION__ isimli bir makro tanımlanmış ve değeri 201710L olarak verilmiştir. Halen C2x standardı üzerindeki çalışmalar ise devam etmektedir.

C Standardının en son durumuna ait genel bilgilere resmî ISO/IEC çalışma grubunun Web sitesinin JTC1/SC22/WG14 - C Sayfası’ndan ulaşılabilir. Standardın bir kopyasını satın almak için de Uluslararası Standartlar Teşkilâtı Web sitesi’nde ISO/IEC 9899 araması yapılabilir.

Sonuç olarak, standardın son durumu şu şekilde özetlenebilir:

  • ISO/IEC 9899:2018: C dili için ISO ve IEC Joint Technical Committee (Ortak Teknik Komite) JTC 1, Information technology (Bilgi teknolojisi), Subcommittee (Altkomite) SC 22, Programming languages, their environments and system software interfaces (Programlama dilleri, ortamları ve sistem yazılım arabirimleri) tarafından hazırlanıp, ISO/IEC tarafından kabul edilen uluslararası standart.
  • INCITS/ISO/IEC 9899:2018[2019]: C dili için ANSI tarafından kabul edilmiş standart. Pratik olarak yukarıdaki doküman ile aynıdır.

Bu kitap mümkün olduğu kadar C17 standardına sadık kalmaya çalışmaktadır.

Dilin çağa uyması için gerekli olan bütün bu gelişmelere rağmen, tasarımcılarının felsefesine aykırı olduğu için C dilinin çok fazla genişletilmesi beklenmemelidir. Bunun yerine, bu dilden yeni diller ortaya çıkmaktadır. Bir örnek, C++’dır. Bu dil, nesneye yönelik programlama ve veri soyutlama teknikleri sağlarken, Standart C ile uyumlu kalmaya çaba göstermektedir. Bu özellikleri, dili daha kapsamlı bir uygulama programlama dili yapmaktadır. Zamanla C++’nın C’nin yerini alması söz konusu olabilir, ancak yine de C++ öğrenecek birisinin önce Standart C’yi bilmesi gerekmektedir.