Kurulum
- Visual Studio Community’i indirip kuruyoruz.
- Karşımıza çıkan listede farklı geliştirme ortamları için hazırlanmış paketler var bu paketlerden Desktop Development with C++ seçip kurulumunu yapıyoruz.
https://learn.microsoft.com/en-us/cpp/build/vscpp-step-0-installation?view=msvc-170
İlk kodumuz
Proje oluşturma
- Visual Studio’yu çalıştır
- Yeni bir proje oluştur (Create new project)
- Console App
- İsmini ve eğer isterseniz klasörünü belirleyip devam edelim.
Programı çalıştırma
Bu template de karşımıza konsol ekranına “Hello World!” yazdıran bir uygulama geliyor. Eğer editörün üst tarafındaki yeşil play üçgenine tıklarsanız kod çalışacaktır.
#include <iostream> // "iostream" içeriğini bu dosyaya copy-paste yapar
// programımız başladığında ilk çalışacak olan fonksiyonumuz "main" fonksiyondur
int main(){ // Fonksiyonun başlangıçı
std::cout << "Hello World!" << std::endl; // Konsol ekranına "Hello World!" yazdırır.
} // Fonksiyonun bitişi
// Bu bir yorum satırıdır. Compiler kodumuzu derlerken bunu dikkate almaz.
Türkçe karakterler ve encoding
Yorum satırlarımızda çeşitli Türkçe karakterler kullandık (ş,ı,ü,ö, gibi). Kodumuzu çalıştırdığımızda aşağıdaki gibi bir pencere gelebilir. Burada bu karakterlerin şuandaki formatta kaydedilemeyeceğini ve isterseniz Unicode formatında yeniden kayıt yapılabileceği denilmekte. Yes diyip geçebilirsiniz.
Normalde kodlamada Türkçe karakter kullanmamamız lazım. Hatta kodumuzun tamamını İngilizce yazmamız lazım. Lakin şuanda bazı şeyler daha anlaşılabilir olması adına Türkçeyi kullanmaya devam edeceğim.
#include
Şimdi bu kodumuzu biraz inceliyelim
#include <iostream>
#include ile başka birisinin yazdığı kodu kendi dosyamıza ekliyoruz. İlerde kodumuzu farklı parçalara/dosyalara böleceğiz. Bu kodları kullanabilmek için yine #include yönelgesini kullanacağız.
int main(){}
int main(){
// Buraya çalışacak ifadeleri yazıyoruz.
}
main fonksiyonu programımızı çalıştırdığımızda ilk çalışacak fonksiyondur. Fonksiyon çeşitli girdiler alabilen ve çıktılar verebilen bir kod kümesidir. Fonksiyonumuzu 4 parçaya bölebiliriz.
int -> dönüş değeri (fonksiyonumuz çıktısının ne tipte olduğu)
main -> fonksiyonumuzun adı
() -> fonksiyonumuzun girdileri (şuanlık herhangi bir girdisi yok)
{} -> fonksiyonunu scope'u. Yani geçerli olduğu alan. Bu parantez içine yazdığımız ifadeler sırasıyla yukarıdan aşağı olacak şekilde çalışacaktır.
return 0;
şimdi fonksiyonumuzun bir dönüş değerinin(return type) olduğunu belirttik. integer -> tamsayı anlamına geliyor. Yani fonksiyonumuzun geriye bir tam sayı döndürmesi gerekiyor. Peki kime döndürecek bu değeri? Bu fonksiyonu çağıran işletim sistemine (Operating System). Peki neyi döndürüyor, burada dönen bir değer görmüyoruz. Aslında main fonksiyonumuz şu şekilde olmalı:
int main() {
return 0;
}
gördüğünüz gibi fonksiyonumuz 0 tamsayını geri döndürüyor ( return ediyor). Diğer fonksiyonlar içinde aynı yazım kuralı geçerli:
return dönüşDeğeri ;
noktalı virgül ifadelerin sonuna eklenir ve ifadenin bittiği anlamına gelir. Eğer eklemezsek syntax-error alırız.
cout & endl
std::cout << "Hello World!" << std::endl;
Yukarıdaki ifadedeyi konsol ekranınına çıktı vermek için kullanıyoruz. << diye gördüğünüz işaretler +, – gibi bir operator’dür. Operator aslında bir fonksiyonun makyajlı halinden başka bir şey değildir. Burada sağdaki ve soldaki değeri alıp bir değer döndürüyor
// ilk önce birinci kısım çalışıyor
std::cout << "Hello World!" << std::endl;
// sonra geriye cout nesnesi dönüyor
std::cout << std::endl;
// tekrar aynı operator çalışıyor ve yine cout nesnesini döndürüyor
std::cout;
cout yazdırmak için gerekli olan nesnemiz yani onsuz olmaz. bir de ifadenin en sonunda endl’ı görüyoruz. Bu ise satır atlamak için kullanılır.
std::cout << "Hello" << std::endl << "World!" << std::endl;
// Output:
// Hello
// World!
‘\n’ : It inserts a new line to the output stream. endl : It inserts a new line and flushes the output stream.
https://codeforces.com/blog/entry/63071#:~:text=’%5Cn’%20%3A%20It%20inserts%20a,and%20flushes%20the%20output%20stream.
Namespace
cout bir nesne ve std bir namespace’dir (isim uzayıdır).
İsim uzayları farklı kütüphanelerin aynı isimli fonksiyonlarının birbiriyle karışmaması için verilir. Örneğin ben bir kütüphane yazdım ve içinde run() fonksiyonu var ve Yasin bir kütüphane yazdı içinde yine run() fonksiyonu var. Şimdi main fonksiyonumuzdan run() fonksiyonumuzu çağırırsak hangi kütüphanenin run fonksiyonu çalışacak? İşte bu sebeple namespace kullanarak hangi kütüphaneye ait olduğunu belirtiyoruz.
Bizler bundan sonra örneklerimizde hep std isim uzayını kullanacağımız için using namespace yönelgesini kullanarak std isim uzayı içindekileri kullanabiliyoruz.
#include <iostream>
using namespace std;
int main() {
cout << "Merhaba C++" << endl;
}
https://stackoverflow.com/questions/6077566/using-namespace-std
Whitespace
Compiler için boşlukların pek bir önemi yok. Önemli olan şey doğru sembolllerin ardı ardına birbiriyle karışmayacak şekilde dizilmesi. İsteseydik aşağıdaki gibi yazabilirdik, isteseydik aralarına büyük boşluklar koyabilirdik. Compiler için bunların hiçbir önemi yok.
#include <iostream>
using namespace std;int main(){std::cout<<"Hello"<<std::endl<<"World!"<<std::endl;}
Comments
Yorumlar, compiler’ın kafasına takmadığı başka bir konudur. Yazdığımız yorumların programın işleyişinde herhangi bir etkisi yoktur. Neden yazıyoruz? Not almak ve dökümantasyon gibi çeşitli sebeplerden. Gereksiz yapılan yorum kodun okunaklılığını azaltır. Gerekli ve güzel yorumlar ise çok faydalıdır.
//bu tek satırlık bir yorumdur
/*bu
* da
* çok satırlık
* bir
* yorumdur */
Compiler
C++ dosyalarımız teker teker preprocessor sonra da compiler aşamasından geçip object file oluşturuyor (yani machine code). Şimdi farklı dosyalar birbirine ait öğeleri kullanıyor bunların birbirine bağlanması gerekli bunun için de linker devreye giriyor ve executable dosyamızı oluşturuyor.
C++ da temelde 2 dosya tipi bulunur:
- .cpp
- .h
compiler sadece .cpp dosyalarını derler .h dosyaları tek başına derlenmez. .h dosyaları preprocessor aşamasında .cpp dosyalarına #include edilerek derlemeye katılır.
https://en.wikipedia.org/wiki/Object_file
- https://runestone.academy/ns/books/published/thinkcpp/Chapter5/returningfrommain.html
- https://learn.microsoft.com/en-us/cpp/cpp/main-function-command-line-args?view=msvc-170
- https://learn.microsoft.com/tr-tr/cpp/preprocessor/hash-include-directive-c-cpp?view=msvc-170
- https://en.wikipedia.org/wiki/Object_file
Leave a Reply