"Derleniyor"dan "Okuyabiliyorum"a
Önceki sayfada bir kaynak dosyayı alıp bir derleyiciyle çalışan bir programa dönüştürdünüz. Şimdi biraz yavaşlayıp o dosyada gerçekte ne olduğuna bakacağız. Her C++ programı aynı birkaç yapısal parçadan oluşur ve bunları adlandırabildiğinizde, tanımadığınız bir .cpp dosyası artık gürültü gibi görünmez.
İşte tam, çalıştırılabilir bir program. Bir kez okuyun, sonra onu satır satır parçalara ayıracağız.
Anlamlı beş satır ve her biri belirli bir iş yapıyor. Bunları tek tek gözden geçirelim.
#include Satırı
#include <iostream>
Bu satır, cout gibi giriş/çıkış özelliklerini kullanabilmeniz için <iostream> başlık dosyasını içe aktarır. #include bir ön işlemci yönergesidir - asıl derlemeden önce çalışır ve esasen o başlık dosyasının içeriğini dosyanıza yapıştırır.
#include satırlarını özel kılan iki şey vardır:
#ile başlarlar ve bu, onları ön işlemci yönergeleri olarak işaretler.- Noktalı virgülle bitmezler. Bu, yakında edineceğiniz "her satır
;ile biter" alışkanlığının yaygın istisnasıdır.
cout kullanıp #include <iostream> yazmayı unutursanız, derleyici cout'un ne olduğunu bilmez ve 'cout' was not declared in this scope gibi bir hata alırsınız. Çözüm neredeyse her zaman eksik bir include'dur.
main Fonksiyonu
int main() {
// ...
return 0;
}
main, programınızın başladığı yerdir. Derlenmiş programı çalıştırdığınızda, yürütme main içindeki ilk satırdan başlar ve main geri döndüğünde durur. Her C++ programının tam olarak bir main'i vardır - ne eksik ne fazla.
Parçalar:
int-main, işletim sistemine bir tamsayı döndürür. Gelenek gereği0, "başarıyla tamamlandı" anlamına gelir.main()- ad, ardından parametreleri için parantezler (burada boş).{ ... }- süslü parantezler gövdeyi sarar: çalışan ifadeler.return 0;-main'i sonlandırır ve başarıyı bildirir. Yazmazsanız, C++main'i sizin yerinize0döndürmüş gibi kabul eder, ama yazmak niyetinizi açık hale getirir.
İfadeler ve Noktalı Virgül
Bir ifade, eksiksiz bir komuttur. C++'ta her ifade noktalı virgülle biter:
C++, satır sonlarını ve fazladan boşlukları tamamen yok sayar. Derleyici, ifadeleri tek satıra mı yoksa on satıra mı yazdığınızı umursamaz - her ifadenin nerede bittiğini ona söyleyen şey ;'dir. Şu üçü de derleyici için aynıdır:
int a = 1; int b = 2;
int a = 1;
int b = 2;
int
a
= 1;
Bu özgürlük, yeni başlayanların en sık düştüğü tuzakla birlikte gelir: unutulan bir noktalı virgül. Burada ne olduğuna bakın.
int x = 5 // <-- noktalı virgül yok
int y = 10;
expected ';' before 'int' gibi bir hata alırsınız. Şu inceliğe dikkat edin: derleyici bir şeyin yanlış olduğunu ancak sonraki satıra ulaştığında fark eder; bu yüzden bildirilen satır numarası genellikle gerçek hatanın bir satır altını işaret eder. Bir hata eksik bir ;'den bahsettiğinde, mesajdaki satırın bir üstündeki satıra bakın.
Süslü Parantezler Blokları Tanımlar
Bazı dillerin kodu gruplamak için girintiyi kullandığı yerde, C++ süslü parantezleri { } kullanır. Birbirine uyan bir parantez çiftinin arasındaki her şey bir bloktur. Fonksiyon gövdeleri, döngüler ve if ifadeleri bunları kullanır:
if'in parantezleri içindeki iki satır yalnızca koşul doğru olduğunda çalışır. Son cout parantezlerin dışındadır, bu yüzden her zaman çalışır.
Yapıyı girinti değil de süslü parantezler tanımladığı için, C++ girinti yapmaya sizi zorlamaz. Ama yine de yapmalısınız: girinti, insanların parantezlerin tanımladığı yapıyı okuma biçimidir. Yaygın bir hata, eşi olmayan bir paranteze sahip olmaktır - her { bir kapanış } ister. Birini unutursanız, derleyici genellikle dosyanın sonuna yakın bir yerde hata bildirir (expected '}' at end of input), yani gerçekte hata yaptığınız yerden uzakta. Parantezlerinizi saymak veya editörünüzün onları sizin için eşleştirmesine izin vermek çok fazla kafa karışıklığını önler.
cout ve << ile Çıktı
cout'u artık birkaç kez gördünüz. Standart çıktı akışıdır ve ona << operatörüyle değer gönderirsiniz ("bunu çıktıya koy" diye okuyun):
Art arda birkaç şey yazdırmak için <<'i zincirleyebilirsiniz. endl satırı sonlandırır (ayrıca arabelleği de boşaltır); "\n" kaçış dizisi ise bir satır sonu yazdırmanın daha hafif bir yoludur. Basit programlar için ikisi de uygundur.
En üstteki şu using namespace std; hakkında: standart kütüphanedeki adlar std namespace'inde bulunur, yani tam ad std::cout'tur. using namespace std;'i bir kez yazmak, std:: önekini atlayıp sadece cout yazmanıza olanak tanır. Kısa örneklerde kullanışlıdır, ama büyük projelerde birçok ekip ad çakışmalarını önlemek için açık std::cout'u tercih eder - bu yüzden iki biçimde de yazıldığını görürseniz şaşırmayın.
Artık Herhangi Bir Programın İskeletini Okuyabilirsiniz
En üstte include'lar, giriş noktası olarak bir main fonksiyonu, noktalı virgülle biten ifadeler, kodu bloklara gruplayan parantezler ve çıktı için cout << - bu iskelet açacağınız neredeyse her C++ dosyasında vardır. Dilin geri kalanı, bu birkaç şeklin üzerine eklenen ayrıntılardır. Bir program göz korkutucu göründüğünde, önce main'i bulun, sonra ifadeleri sırayla okuyun; yapı size yol gösterecektir.
Sıradaki: Yorumlar
Şu anda programlarınızdaki her satır, derleyicinin okuduğu koddur. Sıradaki adımda, derleyicinin bilerek yok saydığı satırlar ekleyeceğiz - yorumlar - böylece kendinize ve diğer okuyuculara notlar bırakabilirsiniz. Tek satırlık // biçimini ve /* ... */ blok biçimini, ayrıca her birinin ne zaman doğru tercih olduğunu göreceksiniz.
Sıkça Sorulan Sorular
Neden her C++ ifadesi noktalı virgüle ihtiyaç duyar?
C++ satır sonlarını ve boşlukları yok sayar; bu yüzden bir ifadenin nerede bitip diğerinin nerede başladığını gösteren açık bir işarete ihtiyaç duyar. Bu işaret noktalı virgüldür ;. Eksik bir noktalı virgül, yeni başlayanların en sık karşılaştığı derleme hatasıdır ve bildirilen satır numarası genellikle onu unuttuğunuz satırın bir sonraki satırıdır.
C++'ta int main() ne yapar?
main, programın çalışmaya başladığı fonksiyondur; yürütme onun ilk satırından başlar ve geri döndüğünde biter. Her C++ programının tam olarak bir main'e ihtiyacı vardır. int, işletim sistemine bir tamsayı durum kodu döndürdüğü anlamına gelir; burada 0 geleneksel olarak başarıyı belirtir.
cout'tan önce std:: yazmak zorunda mıyım?
Ya std::cout (tam nitelikli) yazarsınız ya da en üste bir kez using namespace std; ekleyip sonra sadece cout yazarsınız. Nitelikli biçim büyük dosyalarda daha güvenlidir; using namespace std; ise küçük örneklerde ve eğitimlerde yaygın bir kısayoldur.