C++ Sorularım ( Başlangıç Seviyesi )
-
Selamlar, okul ile paralel olarak C++ öğrenmeye başladım. Takıldığım bir çok nokta oluyor, genelde ufak tefek çoğunu kendi başıma halledebiliyorum ancak açtığım daha önceki bi konudaki tavsiye üzerine sorularımı sorabilmek adına bu konuyu açıyorum. Her seferinde yeni konu kirliliği olmasın, bu konu altında yardırayım gitsin :)
Kodlamayı terminal üzerinden linux cluster'a bağlanıp yapıyorum/yapıyoruz. Tamamen komut istemi ortamı yani. "g++" denilen bir derleyici modül var. İlk soru oradan.
-Compiler, binder ve assembler denilen kavramlar tam olarak ne oluyor, farkları nedir?
-Hemen hemen her örnek kod diziliminin sonunda "return 0;" içerikli bir satır var. O satırı kaldırdığımda da kodun aynen çalışmaya devam ettiğini görüyorum. return 0; nedir, niçindir?
Teşekkürler
noname tarafından 15/Kas/15 22:11 tarihinde düzenlenmiştir -
Hocam compiler sorularıni da aşağı yukarı biliyorum ama tam tanıma hakim olmadığım için yanlış bir şey soylemeyeyim.
Gelelim diğer soruya return 0 derleyiciye programın sorunsuzca bittiğini söyler. Yani sorun yok demektir. Eğer return -1, veya bunun tarzı bir geri donus yapılırsa programda sorun yaşandığı anlatılır. Return ile bu tur kontroller yapılıyor. Mesela if/else yapısı kurarsin, kullanıcıdan blr giriş yapmasını istersin atiyorum 0-10 arasında gibi bu degerlerde girerse return 0; verirsin eğer değerlerin dışına çıkarsa return -1 yaparsa programda hata olur gibi kullanımları var. Sürç-ü lisan ettiysek affola...
-
hocam nerde okuyorsun :D bende bil. müh. 1.sınıfa başladım. bize C anlatıyorlar. geçen sene yazdığım bir yazı vardı.. anlamana yardımcı olabilir sanırım. http://berkaycit.blogspot.com.tr/2014/06/c-metotlar-fonksiyonlar.html
yinede bilen hocalar aydınlatırlar.
bu arada assembler düşük seviyeli assembly yi derlemek için ama compiler yüksek seviyeli veya orta seviyeli diller için c, c++, c# vb. diye biliyorum. belki yanlış biliyorumdur. yanlış biliyosamda affola :D
-
Compiler: Derleyici. İnsanların anlayabildiği kaynak koddan (bir programlama dili ile yazılmıştır) makine diline çevirim işlemi yapar. Bu işlem esnasında önce kaynak kodu parçalara ayrılır (lexical analysis), oluşturulan parçacıklar dilin kurallarına göre parçalanır ve ast (abstract syntax tree, soyut sözdizim ağacı) oluşturulur. AST ise makine koduna dönüştürülür.
Binder: Bunun ne olduğunu bilmiyorum fakat linkerı kastettiğinizi düşünüyorum. Linker en basit anlamda makine koduna dönüştürülen birçok parçayı uygun şekilde birleştirir ve çalıştırılabilir dosya tipine göre gerekli başlık dosyalarını üretir (exe gibi).
Assembler: Platformun assembly dilini makine koduna çevirir.
g++, GCC'nin (GNU Compiler Collection) C++ derleyicisini çalıştırmaya yarayan komuttur. cpp uzantılı dosyaları derler ve std C++ lib'i de öntanımlı olarak bağlayarak çalıştırılabilir dosya oluşturur (farklı şeyler de oluşturabilir tabi isterseniz).
return deyimi, o anki işlev kapsamından çıkmaya yarar. Parametre ile yazıldığında işlev kapsamından çıkıp (yani işlevi durdurup), işlevi çağırana parametreyi döndürür. Standart int döndürebildiği gibi farklı tipteki nesneleri de döndürebilir. return ile geri döndürülecek parametre sayısı sadece 1'dir.
main işlevinin (evet, main de bir işlevdir, örneğin dll dosyaları main işlevini içermez) geri dönüş değeri int olduğundan (standart böyle söyler), main işlevini çağırana (işletim sistemidir genelde) programın hatalı/hatasız sonlandığını söyler. Eğer işlevin duyurusu void ise (hiçbir şey geri döndürme) sadece return ile işlev kapsamından çıkmak mümkündür, aksi halde imzaya uygun tipte bir şey geri döndürmek gerekir. main her koşulda sonlanacağı için (program duracak) açıkça yazmak gerekmez ama yazılması tavsiye edilir (C99 standardı return olmadan sanki return 0 yazılmış gibi davranılmasını söyler).
-
-Hemen hemen her örnek kod diziliminin sonunda "return 0;" içerikli bir satır var. O satırı kaldırdığımda da kodun aynen çalışmaya devam ettiğini görüyorum. return 0; nedir, niçindir?
Çalışan bir programı exit(main()); şeklinde düşünebilirsin, burada exit fonksiyonu programın sonlandırılmasından sorumlu fonksiyondur.
Burada main fonksiyonu return 0; ifadesi ile sonlandığında, geri dönüş değeri üretilir ve bu da exit fonksiyonuna argüman olur. Exit işlemini
yapan fonksiyonda bunu işletim sistemine bildirir. İşletim sistemi için programın başarılı ya da başarısız olması birşey ifade etmez, yani bu exit kodunun
işletim sistemi için bir önemi yok. Bu exit kodu, programı sen başka bir program üzerinden başlattığın zaman önem kazanır. Çağrıyı gerçekleştiren program, hata veya
düzgün sonlanma durumlarına göre farklı senaryolar izleyebilir.
return ifadesinin yazılmamasının bir şey değiştirmemesi ise @YeniHarman'ın da söylediği gibi standartlardan kaynaklanmaktadır. Örneğin C++ için
A return statement in main has the effect of leaving the main function (destroying any objects with automatic
storage duration) and calling std::exit with the return value as the argument. If control reaches the end
of main without encountering a return statement, the effect is that of executing
return 0;Bir program main sonuna bir return ifadesi ile karşılaşmadan ulaşır ise return 0; ifadesi yürütülecektir diyor.
-
Return ifadesi "exit code" olarak geçer. nirvana_gg'nin dediği gibi programı başka bir program içerisinden çağırdığında, doğru çalışıp çalışmadığını anlamak için kullanırsın.
Örneğin programında bir if-else bloğu oluşturursun, eğer program beklenildiği işi başarıyla yaptıysa (mesela aynı dizinde "metin.txt" isimli dosyayı açmak gibi) programın "0" döndürebilir, eğer dosyayı bulamadıysa da "0" olmayan bir değer döndürebilir.
https://stackoverflow.com/questions/1101957/are-there-any-standard-exit-status-codes-in-linux
Örneğin buradaki listede verilmiş:
1: Catchall for general errors
2: Misuse of shell builtins (according to Bash documentation)
126: Command invoked cannot execute
127: "command not found"
128: Invalid argument to exit
128+n: Fatal error signal "n"
255: Exit status out of range (exit takes only integer args in the range 0 - 255)Ayrıca madem linux ortamda derliyorsunuz, orada çalıştırılmış son programın hata koduna bakabilirsin.
Komut satırı ortamında "echo $?" komutu ile (tırnaklar olmadan) o komut satırı ortamında çalıştırdığın son programın döndürdüğü hata kodunu görebilirsin.
Edit: Bu kitabı da kesinlikle tavsiye ederim.
-
Hepinize cevaplar için çok teşekkür ederim. Videolu/pdfli vs. her türlü kaynak tavsiyenize de açığım bu arada.
Matematik üzerine bir şeyler yaparken p,x,y,z gibi değişkenler tanımlayıp bazı basit işlemler yaptırıyoruz. Kimi zaman
"float x=0, y=0;"
şeklinde tanımlarken kimi zaman ise
"int p=0;" şeklinde giriyoruz.
Bu int ve float ın olayı/farkı nedir? Başka çeşitleri de var mı?
-
hocam onlar veri türleri genelde hepsininki aynı buradan bakabilirsin hepsine
-
temel bir kitap alırsan senin içi çok iyi olur. "Kaan Arslan" - "A'dan Z'ye C klavuzu" gibi...
-
noname bunu yazdı
Hepinize cevaplar için çok teşekkür ederim. Videolu/pdfli vs. her türlü kaynak tavsiyenize de açığım bu arada.
Matematik üzerine bir şeyler yaparken p,x,y,z gibi değişkenler tanımlayıp bazı basit işlemler yaptırıyoruz. Kimi zaman
"float x=0, y=0;"
şeklinde tanımlarken kimi zaman ise
"int p=0;" şeklinde giriyoruz.
Bu int ve float ın olayı/farkı nedir? Başka çeşitleri de var mı?
Farkları var illa ki hocam.Bellekte kapladıkları yerler farklı en başta.Ayrıca int dediğin değer -32768 ile +32767 arasında değer alır.Senin kullanma şekline göre işine hangisi uygunsa onu kullanırsın.
Ayrıca int tam sayı değerlerdir tutupta 8,6 gibi bi değer atamazsın atadığın anda program bunun sadece 8 olan tam kısmını görecektir ondalıklı kısmını tanımayacaktır bunları göstermek için float ya da double değişkenlerini kullanırsın.En baş işlemler için yani basit matematiksel işlemler ve yaş sorgusu filan için int diyebilirsin bunlar işini görür ama tutupta bir faktöriyel hesabı filan yaptıracaksan bunu double olarak tanımlayıp öyle işlemlerini yaptırman gerekir.Aklına takılan birşey olduğunda sorabilirsin hocam.C++ bilmiyorum ama C ve C# biliyorum.Zaten bir dili öğrendikten sonra diğerlerini öğrenmek bir ayını almıyor sadece syntax ları öğreniyorsun kütüphanelerini öğreniyorsun geri kalan kısım hep aynı oluyor.Ayrıca bunları öğrenmek için bir sürü videolu eğitim seti var hocam ben birazdan buraya bitanesini koyucam gayet güzel anlatıyor C++ dilini.Ayrıyeten bir algoritma kitabı alıp algoritma becerini geliştirmenide tavsiye ederim.Her zaman daha detaylı daha kestirme düşünme becerini ve sorunlara çözüm üretme becerini geliştiriyor.Abilerim ablalarım yanlış birşey söylediysem affola bildiklerim kadarıyla yardımcı olmak istedim :)
-
noname bunu yazdı
Hepinize cevaplar için çok teşekkür ederim. Videolu/pdfli vs. her türlü kaynak tavsiyenize de açığım bu arada.
Matematik üzerine bir şeyler yaparken p,x,y,z gibi değişkenler tanımlayıp bazı basit işlemler yaptırıyoruz. Kimi zaman
"float x=0, y=0;"
şeklinde tanımlarken kimi zaman ise
"int p=0;" şeklinde giriyoruz.
Bu int ve float ın olayı/farkı nedir? Başka çeşitleri de var mı?
http://www.tahribat.com/forum/egitim-c-dersleri-193183 bunu indirmiştim zamanında başlayamamıştım ama, işine yarar belki