2013-09-30 27 views
15

Programlamada yeniyim ve bazı basit programlar "Merhaba dünya" stilini kodluyordum.#include <stdio.h> gerçekten bir c programında ne yapıyor

Tüm bu programlarda üstte #include<stdio.h> yazdım ama bunun tam olarak ne anlama geldiğinden emin değilim. Ben googled ve stdio.h önişlemci için komutları olan bir dosya olduğunu, ancak bir ön işlemci nedir? Kod yazarken, onu derlediğimi ve kodumun "bilgisayar" ın okuyabildiği bir forma dönüştüğünü ve sonra onu çalıştırabileceğimi düşündüm. Birisi bana bu komutun kullanımının ne olduğunu açıklayabilir mi?

+0

http://en.wikipedia.org/wiki/C_preprocessor –

+0

@ Nat95 SO, bir çözüm sunmanız gereken bir forum değil, SO bilgi yaymak istiyor. Dolayısıyla, tek bir bağlantı formundaki cevaplar taşma yığınına hoş gelmez. Cevabı bilen biri tarafından bir cevap yazılmalıdır. ve size açıklayabilirdi.bu yüzden link veya site dışı cevabını istemekten kaçının. – dhein

+1

tamam! bunu bilmiyordum! teşekkürler @Zaibis – yaylitzis

cevap

26

stdio.h dosyasını arar ve etkili bir şekilde bu #include ifadelerinin bulunduğu yere yapıştırır. Bu dosya, printf(), scanf() gibi işlevlerin prototiplerini içerir, böylece derleyici parametrelerinin ve dönüş değerlerinin ne olduğunu bilir.

+0

tamam yardımcı olabilir, ben printf kullandığınızda bu yüzden printf kodu kullanan stdio.h? printf sürümümü uygulayabilir miyim (bunu yapmanın aptalca olduğunu biliyorum, ama söyleyeyim ..)? – yaylitzis

+0

@ Nat95: Hayır, printf işlevinin kodu stdio.h değil, yalnızca işlev tanımı. Bağlayıcı, daha sonra standart kitaplığa bağlanırken bunu çözer. Kendi printf işlevinizi kesinlikle yazabilirsiniz. – Lucas

+0

+1 Bu, önişlemcinin #include ile etkin bir şekilde yaptığı şeyin en iyi ve en basit açıklamasıdır. Önceden oluşturulmuş dosyaları tutmak için derleyici/derleme sistemine talimat verirseniz bunu görebilirsiniz. – stijn

9

En basit açıklama belki de programınızın numaranızın numarasını kullanması veya kodunun kendi programınızın bir parçası olmayan birçok işlevi kullanmasıdır. Örneğin Bir şeyi yazdırmak için kodunuza "printf" yazarsanız, derleyici bu çağrıyla ne yapacağını bilmez.

stdio.h, bu printf bilgilerinin bulunduğu yerdir.

Güncelleme: stdio.h ikamet

printf fonksiyonunun (isim, dönüş türü ve parametreleri) ait prototip Aksine. Bu derleme aşamasında gerekli. Gerçek printf kodu, derlemeden sonra gelen bağlantı fazında yer almaktadır.

İçerme ifadesi, temel derlemeden ÖNCE tüm işlev prototiplerini temel olarak ekler. Bu nedenle ön işlemcinin adı.

Güncelleme 2:

odaklanmış soru (ve OP de fonksiyonların yazma tanımı kendisi hakkında sorulan include ifadesi olduğundan, bir başka önemli yönü de (açısal parantez unutmayın)

gibi yazılmışsa olduğunu
#include <stdio.h> 
önişlemci varsayar

, standart bir kütüphane başlığıdır ve derleyici kurulduktan ilk sistem klasörlerinde arar.

, bunun yerine bir profesyonel gramer başına bir işlevi tanımlar ve o kullanmak (tırnak unutmayın) olur geçerli çalışma dizini .h dosyası yerleştirmek

#include "stdio.h" 

Following bunu göstermektedir ve davranış tüm platformlarda taşınabilir.

+0

tamam, printf kullandığınızda printf uygulayan kod stdio.h dosyasında bulunur mu? printf sürümümü uygulayabilir miyim (bunu yapmanın aptalca olduğunu biliyorum, ama söyleyeyim ..)? – yaylitzis

+0

Evet bunu yapabilirsin. Lütfen yukarıdaki cevabın aşırı basitleştirilmiş olduğunu anlayın. Ama başlamak için doğru bir kavramdır. Derinlere inerken çok fazla ayrıntı görebiliyorsunuz. Aslında BSc'nin ilk programlama kursumda on yıldan fazla bir süredir printf'in daha yeni bir sürümünü yazdım. Bu, doğrudan video belleğe erişme ve işaretçiler aracılığıyla belirli adreslere yazma. – fayyazkl

+0

Açıklığa kavuşturmak için .h dosyaları ve .c dosyaları vardır. h dosyaları sadece işlev prototiplerini içerir, yani fonksiyon isminin ne olduğunu, dönüş türünü ve parametrelerini söyler. Asıl tanım, derlemeden sonra gelen bağlantı fazında bulunur. – fayyazkl

0

Derleyiciye, işlevler, yapılar, makrolar ve vb. Dosyaları glibc'nin bir parçasını temsil eden sdtio.h dosyasından (veya aldığınız standart C kitaplığı ne olursa olsun) kullanmasını söyler. Derleyici ayrıca, standart C kütüphanesine bağlanabilmesi için çıktı dosyasının "link listesine" kaydedilmesini de ekler.