C Programlama Dili Yapısı ve Geliştirme Aşamaları -1

Fatma Vural
5 min readJun 9, 2023

--

Yapay zeka ile oluşturuldu.

Yazılım denince çeşitli programlama dili ve programlama kaynakları akla gelmektedir. Bilimsel, uygulama, görüntüsel, simülasyon ve ya sistem yazılımlarında kullanılan pek çok programlama dili mevcuttur.

Kaynaklar şu an halen kullanımda olan yaklaşık 1000–1500 programlama dilinin varlığından söz etmektedir. Bu kadar fazla programlama dili olmasına karşın hala yeni programlama dilleri tasalanmakta ve tasarlanan dilleri incelemek ve kullanmak için pek çok ölçütler de vardır. Belirlenen ölçütlerin ilki programlama dilinin seviyesidir.

Bir programlama dili seviyesi insan algısına ve ya makine diline (0–1) yakınlığının ölçütüdür. Bir programlama dili insan algısına ne kadar yakın olursa o yüksek, ne kadar makine diline yakınsa düşük seviyeli olarak adlandırılmaktadır. Makine dilinde yazılan kodlar doğrudan makinenin işlemcisine, donanım parçalarına verilen komutlardır. Değişik bir CPU kullanıldığında ya da bellek düzenlemesi farklı bir şekilde yapıldığında artık program çalışmaz, programın yeniden yazılması gerekir. Çünkü makine dili yalnızca belirli bir CPU ya da CPU serisine uygulanabilir. Makine dili taşınabilir (portable) değildir. Ayrıca, makine dilinde kod yazmak çok zahmetlidir.

C dili hem makinenin algısına hem de insanın algılamasına yakın bir dildir bu sebeple programcıya uzak değildir. Bir programı C dili kullanarak yazmak, aynı programı makine dilinde yazmaya göre çok daha kolay olmasına karşın, C’de yazılmış bir programın verimi aynı oranda düşmez. C dili verim açısından bakıldığında birçok uygulama için, doğrudan makine diline tercih edilebilir.

C dilinin ana uygulama alanı “Sistem programlama” dır.

Sistem programlama, donanımın yönetilmesi, yönlendirilmesi ve denetimi için yazılan, doğrudan makinenin donanımla ilişkiye giren programlardır. Örneğin, işletim sistemleri, derleyiciler, yorumlayıcılar, aygıt sürücüleri (device drivers), bilgisayarların iletişimine ilişkin programlar, otomasyon programları, sistem programlarıdır. C programlamadan önce sistem programları assembly dillerle yazılıyordu. Günümüzde sistem programlarının yazılmasında C dilinin neredeyse tek seçenek olduğu söylenebilir. Bugün cep telefonlarından insansız hava araçlarına kadar her yerde C kodları çalışıyor.

  • C dilinin pek çok avantajları vardır. C çok esnek bir dildir. Diğer dillerde olduğu gibi programcıya kısıtlamalar getirmez. Makinanın olanaklarını programcıya daha iyi yansıtır.
  • C verimli bir dildir. C de yazılan programlar dilin düzeyinin düşük olması nedeniyle hızlı çalışır. Verimlilik konusunda assembly diller ile rekabet edebilir.
  • C doğal bir dildir. C bilgisayar sistemi ile uyum içindedir.
  • C küçük bir dildir. Yeni sistemler için derleyici yazmak zor değildir.
  • C nin standart bir kütüphanesi vardır. Bu kütüphane ile sık yapılan işlemler için ortak bir arayüz sağlanmıştır.

Diğer tüm bilgisayar programlama dillerinde olduğu gibi C dilinin de zayıf tarafları vardır. Esnek ve güçlü bir dil olması programcının hata yapma riskini artırır. C dilinde yazılan kodlarda yapılan yanlışlıkların bulunması diğer dillere göre daha zor olabilir. Ayrıca C’nin eğitimi diğer bilgisayar dillerine göre daha zordur.

C dili genellikle birkaç parçadan oluşan sistemlerdir: program geliştirme ortamı, dil ve C standart kütüphanesi. C programları geliştirebilmek için 7 aşamadan geçerler. Bunlar: kod yazma, düzenleme, ön işleme, derleme, bağlama, yükleme ve yürütmedir.

1. Write Source Code

İlk kısım dosya düzenlemedne oluşur. Bu düzenleme programı ile gerçekleştirilir. Linux sistemlerinde yaygın olarak kullanılan düzenleyiciler vi ve emactır. Eclipce ve Microsoft Visual Studio gibi tümleşik C/C++ geliştirme ortamları için yazılım paketleri programlama ortamlarına ilave edilmiş düzenleyiciler içermektedir. Eğer tümleşik bir program ortamı kullanıyorsanız programı yazmanız birinci aşamayı oluşturmanızı sağlar.

2. Pre-Processing (Ön İşleme)

Ön işleme, ön işlemci aracı (derleme sırasında sistem tarafından çağrılan önceden yazılmış bir program) kullanılarak gerçekleştirilen derleme işleminin ilk adımıdır. Bir C programında # simgesi ile başlayan tüm ifadeler ön işlemci tarafından işlenir ve program dosyamızı # ifadesi olmayan bir ara dosyaya dönüştürür. Aşağıdaki ön işleme görevleri altında gerçekleştirilir:

a) Yorumların Kaldırılması

b) Makro Genişletme

c) Dosya dahil etme

d) Koşullu Derleme

3. Compiling (Derleme)

Derleme aşamasında C programında yazılan orta seviye programlama (.i) dosyası, düşük seviyeli assembly (.s) dosyasına dönüştürmek için derleyici yazılımı kullanır. Assembly kodu, düşük seviyeli komutları yazmak için kullanılan basit bir İngilizce tipi dildir. Tüm program kodu, derleyici yazılımı tarafından tek seferde ayrıştırılır (sözdizimi analizi) ve kaynak kodda bulunan sözdizimi hatalarını veya uyarıları terminal penceresi aracılığıyla bize bildirir. Dilin kurallarını ihlal eden hataları (syntax errors) olarak geliştiriciye gösterilir ve derleme işlemi iptal edilir. Derleyici tarafından bizlere iletilen hata mesajlarının standart bir formatı yoktur. Bu mesajların formatları derleyiciden derleyiciye değişmektedir.

4. Assembling (Montaj)

Derleme düzeyi kodu (.s dosyası), bir derleyici kullanılarak makinenin anlayabileceği bir koda (ikili/onaltılık biçimde) dönüştürülür. Assembler, montaj kodunu makine koduna çeviren önceden yazılmış bir programdır. Bir assembly kodu dosyasından temel talimatları alır ve bunları nesne kodu olarak bilinen makine tipine özgü ikili/onaltılık koda dönüştürür.

Oluşturulan dosya, derleme dosyasıyla aynı ada sahiptir ve DOS’ta .obj ve UNIX işletim sisteminde .o uzantılı bir nesne dosyası olarak bilinir.

Bu dosyaya (.o) aynı zamanda amaç dosyada denmektedir. Derlediğimiz her .c uzantılı kaynak kod dosyası, derleme sonucunda yine aynı isimde ve .o uzantısınasahip olan object code dosyalarını meydan agetirecektir. Daha sonra ayrı ayrı oluştuurlan bu dosyaların bağlanması ve tek bir çalıştırılabilir program haline getirilmesi için linking aşamasına geçilmesi gerekmektedir.

5. Linking (Bağlama)

Bazen C dosyaları tek bir dosyadan meydana gelmez. Bu durumda derleme sonucunda ortaya çıkan her bir dosyanın object code dosyaları bir araya getirilip çalıştırılabilir dosya (executable file) haline getirilmesi gerekmektedir. Bu durumda linker (bağlayıcı) adı verilen programlar kullanılır. Bu programlar object file dosyalarını bağlayarak (linking) ve ya tek bir object code varsa onu kulanarak, DOS’ta “.exe” ve UNIX OS’de “.out” uzantılı yürütülebilir bir dosya oluşturur. Böyleye tüm c kodları doğru şekilde derlenmiş ve tek bir çalıştıırlabilir dosya haline getirilmiş olur. Bundan sonraki çalışma zamanı tamamen işletim sisteminin çalışma zamanı ve bellek yönetimi yapısına göre değişmektedir.

6. Load (Yükleme)

Derlenmiş ve çalıştırılabilir dosya haline getirilmiş bir C programını çalıştırdığımızda, bu program önce RAM’e yüklenir.İşte bu işleme yükleme (loading) denmektedir.Bu işlem işletim siteminin yükleyici program (loader) adı verilen bir program sayesinde yapılmaktadır. HEr sistemin yükleyici programı farklılık gösterebilir.

7. Executing (Yürütme)

Bir program belleğe yüklendiğinde işlemcinin bu bellekte yer alan kodları işlemesine çalıştırma(executing) adı verilir. Örneğin, DOS’ta derlenip ”.exe” veya UNIX OS’de “.out” haline getirilmiş bir C programına çift tıklayrak açtığınızda onu belleğe yüklemiş ve çalıştırmış olursunuz.

#include <stdio.h>

int main() {
/* my first program in C */
printf("Hello, World! \n);

return 0;
}

Yukarıdaki programın çeşitli bölümlerine bir göz atalım ;

  • Programın ilk satırı #include < stdio.h > bir C derleyicisine gerçek derlemeye gitmeden önce stdio.h dosyasını eklemesini söyleyen bir önişlemci komutudur.
  • Sonraki satır int main ( ) program yürütmesinin başladığı ana işlevdir.
  • Sonraki satır /* … * / derleyici tarafından yok sayılır ve programa ek yorumlar eklenmesi istenir. Bu tür satırlara programda yorumlar denir.
  • Sonraki satır printf ( … ) C’de bulunan ve “Merhaba Dünya!” mesajına neden olan başka bir işlevdir!” ekranda görüntülenecektir.
  • Sonraki satır dönüş 0; ana ( ) işlevini sonlandırır ve 0 değerini döndürür.

Basit adımlarda kaynak kodun bir dosyaya nasıl kaydedileceğini ve nasıl derlenip çalıştırılacağını görelim;

  • Bir metin düzenleyicisi açın ve yukarıda belirtilen kodu ekleyin.
  • Dosyayı hello.c şekilde kaydedin
  • Bir komut istemi açın ve dosyayı kaydettiğiniz dizine gidin.
  • Tür gcc hello.c ve kodunuzu derlemek için enter tuşuna basın. (burada gcc yoksa indiirn ya da sürüm güncellemin gerekmektedir)
  • Kodunuzda hata yoksa, komut istemi sizi bir sonraki satıra götürür ve a.out (UNİX OS) ve a.exe (DOS) yürütülebilir dosya C dosyanızın bulunduğu dizinde oluşturulacaktır.
  • Şimdi oluşan a.out programınızı yürütmek için komut isteminde yazın.
  • Çıktıyı göreceksiniz “ Hello World! “ ekrana yazılmıştır.
$ gcc hello.c
$ ./a.out
Hello, World!

Kaynaklar

  • C ile Programlama |Paul & Harvey Deitel
  • C Notlarım | Necati Ergin
  • C programlama dili : Kral mı baş belası mı? | Coşkun Taşdemir
  • C -Program Structure | https://www.tutorialspoint.com/

--

--

Fatma Vural

I’m a analog person in digital world also part - time engineer.. ✨