newgammaknife
Hectopat
- Katılım
- 10 Ekim 2021
- Mesajlar
- 87
- Çözümler
- 4
C++ 'da kullandığın fonksiyonları header dosyasında isim ve yöntem olarak tanımlaman gerekiyor. Derlendiğinde hepsini tek bir cpp dosyası olarak görüyor ve üst satırdan en alt satıra doğru derleyerek çalıştırıyor. Mesela kullanacağın fonksiyon tanımı altta kalıyorsa C++ o fonksiyonu görmüyor. Header dosyaları "buraya bu fonksiyon gelecek, merak etme ben içerde bunu tanımladım" diye derleyiciyi uyarıyor.Syntaxı zor değil. Çoğu dille hemen hemen benzer. Zor olan şey C++'ın, doğru kod yazması.
C++ low level bir dil. (C#, Python, Java vb dillere kıyasla) Ayrıca C++ memory safe bir dil değil. Memory safe dediğimiz de, bir dilin kendi bellek yönetimini güvenli* bir şekilde yapmasından bahsediyoruz. Java da, Rust da memory safe dillerdir.
C++'ta bellek yönetiminin güvenliğinden sen sorumlusun. Bir değişken scopeta yaratıldığında, scope bittiğinde ölür. Sen o ölen değişkeni başka bir yerde referans olarak tutuyorsan, bu senin programında undefined behaviour'a sebep olur ve sigseg yada sigabrt yersin. İkisi de programı çökertirler. Segmentation error, işletim sistemi seviyesi hatadır, sigabrt ise C++'ın exception atacağı zaman uygulamaya vurduğu sinyal. (C++ exceptionlarda varsayılan olarak std::terminate çağırıyor, ve std::terminate'in de varsayılan olarak çağırdığı fonksiyon abort())
Yukarıda bahsettiklerim sana çok anlam ifade etmeyebilir, kısaca, dikkatsizsen C++'ta sabah akşam programların çökecek ve bunları ayıklamak uzun sürecek demek oluyor.
C++' ne zor bir dil, ne de kolay bir dil. Eğer arkasındaki konseptleri öğrenmezsen kesinlikle acı çekeceğin, zorlanacağın bir dil ama.
*: Bellek yönetimi her zaman runtime dinamik olacak diye bir şey yok. Rust'ı memory safe kılan mesela, ownership ve borrow checker.
Kitapları boş ver. C++ dökümantasyonu aradığın şey. Temel programlamayı öğrendikten sonra C++'ta bir şey öğrenmek istiyorsan, dökümantasyon kitaplardan daha yararlı.
C#'ta header dosyaları vb şeylere sahip. Tümleşik ne demek? Bütün derlenen programlar belli bir sıra ile derleniyor zaten?
C++'ta da, C# gibi class scope'unda tanımlarsan, hangisinin önce geldiğinden bağımsız olarak çalışacak. Forward declaration yapmıyoruz her zaman.C++ 'da kullandığın fonksiyonları header dosyasında isim ve yöntem olarak tanımlaman gerekiyor. Derlendiğinde hepsini tek bir cpp dosyası olarak görüyor ve üst satırdan en alt satıra doğru derleyerek çalıştırıyor. Mesela kullanacağın fonksiyon tanımı altta kalıyorsa C++ o fonksiyonu görmüyor. Header dosyaları "buraya bu fonksiyon gelecek, merak etme ben içerde bunu tanımladım" diye derleyiciyi uyarıyor.
C#'ta ise fonksiyonu scope un herhangi bir yerinde tanımlayabilirsin, sıkıntı olmayacaktır.
auto bar() -> void {
foo(); // error: 'foo' was not declared in this scope.
}
auto foo() -> void {
std::cout << "foo" << std::endl;
}
class baz {
public:
auto bar() -> void {
foo(); // ok, output: foo
}
auto foo() -> void {
std::cout << "foo" << std::endl;
}
};
Syntaxı zor değil. Çoğu dille hemen hemen benzer. Zor olan şey C++'ın, doğru kod yazması.
C++ low level bir dil. (C#, Python, Java vb dillere kıyasla) Ayrıca C++ memory safe bir dil değil. Memory safe dediğimiz de, bir dilin kendi bellek yönetimini güvenli* bir şekilde yapmasından bahsediyoruz. Java da, Rust da memory safe dillerdir.
C++'ta bellek yönetiminin güvenliğinden sen sorumlusun. Bir değişken scopeta yaratıldığında, scope bittiğinde ölür. Sen o ölen değişkeni başka bir yerde referans olarak tutuyorsan, bu senin programında undefined behaviour'a sebep olur ve sigseg yada sigabrt yersin. İkisi de programı çökertirler. Segmentation error, işletim sistemi seviyesi hatadır, sigabrt ise C++'ın exception atacağı zaman uygulamaya vurduğu sinyal. (C++ exceptionlarda varsayılan olarak std::terminate çağırıyor, ve std::terminate'in de varsayılan olarak çağırdığı fonksiyon abort())
Yukarıda bahsettiklerim sana çok anlam ifade etmeyebilir, kısaca, dikkatsizsen C++'ta sabah akşam programların çökecek ve bunları ayıklamak uzun sürecek demek oluyor.
C++' ne zor bir dil, ne de kolay bir dil. Eğer arkasındaki konseptleri öğrenmezsen kesinlikle acı çekeceğin, zorlanacağın bir dil ama.
*: Bellek yönetimi her zaman runtime dinamik olacak diye bir şey yok. Rust'ı memory safe kılan mesela, ownership ve borrow checker.
Kitapları boş ver. C++ dökümantasyonu aradığın şey. Temel programlamayı öğrendikten sonra C++'ta bir şey öğrenmek istiyorsan, dökümantasyon kitaplardan daha yararlı.
C#'ta header dosyaları vb şeylere sahip. Tümleşik ne demek? Bütün derlenen programlar belli bir sıra ile derleniyor zaten?
Biraz geç cevap verdim. Dediklerinizden biraz anladım .C++'ın en büyük handikapı header dosyaları ile çalışması, yani C# gibi tümleşik değil, belirli bir sıra ile derleniyor. Bu yüzden belirli kuralları var ancak yapısını öğrendikten sonra çok keyifli bir dil çünkü bilgisayar dünyasının "God Mode" u sayılır kendisi.
Dediğim gibi Programlarlar ve projeler oyunlar vs.C++'ı seçmenizin özel bir sebebi var mı? Eğer öğrenecekseniz bu siteyi öneririm.
Bu mesajı çok az anladım. Kelime bilmiyorum hocam header dosyası ve scope nedir?C++ 'da kullandığın fonksiyonları header dosyasında isim ve yöntem olarak tanımlaman gerekiyor. Derlendiğinde hepsini tek bir cpp dosyası olarak görüyor ve üst satırdan en alt satıra doğru derleyerek çalıştırıyor. Mesela kullanacağın fonksiyon tanımı altta kalıyorsa C++ o fonksiyonu görmüyor. Header dosyaları "buraya bu fonksiyon gelecek, merak etme ben içerde bunu tanımladım" diye derleyiciyi uyarıyor.
C#'ta ise fonksiyonu scope un herhangi bir yerinde tanımlayabilirsin, sıkıntı olmayacaktır.
Yazılıma bir dil öğrenme amacıyla başlama:Merhaba, C++ hakkında hatta hiçbir yazılım dili hakkında bilgim hiç yok. Yani tam anlamı ile sıfırdan başlıyorum. BTK Akademi diye devletin bir sitesi varmış. Ona kayıt olacağım ve codeacademy gibi sitelerden destekte alarak en azından C++ hakkında temel ve bir tık ileri (orta seviye) öğrenebilir miyim? Kitaplardan da destek alacağım. Ama aklımda bir soru var. Çoğu insan C++ zor olduğunu söylüyor. Daha kolay yazılım dillerinden mi başlamalıyım?
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.