Merhaba, tekrar hoş geldiniz.
Bu derste, bazı yaygın derleyicilerin ve uyarıların üzerinden geçmek istiyorum.
Bazı yaygın c problemleri hakkında konuştuk.
Ancak bazen derleyici size bunu söylemeye çalışırken programınızda bu hataların
olduğunu bile bilmezsiniz.
Derleyici hataları ve uyarıları yeni programcılar için gerçekten anlaşılmaz olma eğilimindedir.
Size noktalı virgülün eksik olduğunu söylüyor olabilirler, ancak ifadenin sonuna ulaşılamadığını söylüyor.
Ve yeni biri için bunun ne anlama geldiğini bile bilmiyor olabilirler.
Bu yüzden çok fazla kod yazmak ve zaman içinde bu derleyici uyarılarından
bazılarını çözmek için çok fazla pratik yapmak gerekir.
Ama bundan önce sizi uyarmak isterim.
Bu nedenle, önceki derste gördüğünüz yaygın sorunlardan bazılarını,
derleyici uyarılarını ve hatalarını ve aslında ne söyleyeceğini açıklayacağım.
Derleyicinin size ne söylediğini anlamanız çok ama çok önemlidir.
Derleyici size bu hatayı söylüyorsa ancak siz bu hatayı anlamıyorsanız,
bu kodu düzeltmeniz çok daha uzun sürecektir.
Ancak hatayı görürseniz ve tam olarak ne dediğini biliyorsanız,
hemen gidip düzeltebilirsiniz.
Hatırlıyorum, programlamaya ilk başladığımda laboratuvardaydım
ve noktalı virgülü kaçırırdım,
bu çok yaygın bir şeydi. Ve derleyici bana noktalı virgülün eksik olduğunu söyleyecekti,
ama ben bunu bilemeyecektim, sadece
deyimin sonuna ulaşılamadığını söyleyecekti ve ben de bu ne demek, deyim nedir
diye soracaktım. Kafam çok karışırdı.
İşte bu yüzden derleyicinin aslında size ne anlatmaya çalıştığına dair bazı ipuçları vermek istedim.
Bu yüzden derleyicinin neden şikayet ettiğini anlamak çok zor.
Bu mesajları deşifre etmek bazen çok
kafa karıştırıcı olabiliyor.
Dolayısıyla, bu derleyici hatalarını düzeltmek için bunları anlamanız gerekir, oldukça basit.
Ve derleyici sizin için işin yarısını yapıyor.
Sözdizimini kontrol ediyor, size tam olarak neyin yanlış olduğunu söylüyor,
bu yüzden bunu kendi yararınıza kullanmalısınız.
Ancak bazen tam olarak ne dediğini anlamak zordur, özellikle de yeniyseniz
ve bazı terminolojiyi anlamıyorsanız.
Derleyici, kodunuzun nasıl çevrileceği konusunda programcının
kodda yazmadığı kararlar verir.
Bu, program ve derleyici için uygundur, böylece daha
kısa ve öz bir şekilde yazılabilir.
Ve sadece uzman programcılar bu özellikten yararlanır.
Yani size söylemek istediğim, derleme yaparken her zaman dash
wall seçeneğini kullanmanız gerektiğidir.
Bu her şeyi değiştirecek.
Yani bazen daha gelişmiş bir özellik, bazı şeyleri
çıkarmanız, çeviriyi
biraz daha verimli hale getirmenizdir.
Ancak bunu eklediğinizde, programın
farklı şekilde derlenmesine neden olursunuz.
Ve sonuç olarak, kodunuzda bilmediğiniz uyarılar olabilir.
Bunu size söylememin nedeni, her zaman belirli bir seçenekle derlemek istemenizdir,
bu da dash wall seçeneğidir.
Ve aslında varsayılan olarak bu kod bloklarında açıktır.
Ve bu, derleyicinin bilmediğiniz şeyler yaptığı
tüm durumları size bildirecektir.
Ayrıca tüm uyarıları açacak, size birçok bilgi
verecektir, çok kullanışlı bir derleyici seçeneğidir.
Bu seçeneği açtıktan sonra, derleyicinin size ne söylediğini
daha iyi anlamanıza yardımcı olmaya çalışabilirsiniz.
Dolayısıyla derleyici size iki tür sorun
gösterecektir. Biri hata.
Bu aslında programın oluşturulmasını engelleyecektir.
Bir sözdizimi hatası var ve program derlenemiyor.
Hiçbir yürütülebilir çalışma
yeniden oluşturulmadı ve. Genellikle, derleyiciden gelen hataları gördüğünüzde,
her zaman ilk hataya odaklanmak istersiniz.
Bu en güvenilir hatadır çünkü
diğer hatalardan bazıları bu ilk hatanın bir sonucu olabilir.
Bu yüzden her zaman ilk hataya odaklanın. Önce en üstteki hataları düzeltin ve ardından
tekrar derleyin ve diğer hataların ortadan kalkıp kalkmadığına bakın.
Uyarılar. Uyarılar, derleyicinin özel durumlar
için gösterdiği ve bir tür anormalliğin tespit edildiği mesajlardır.
Bunlar ölümcül olmayan hatalar. Böylece çalıştırılabilir dosya oluşturulacaktır.
Ama yine de düzeltmeniz gereken bir şey.
Uyarının orada olmasının bir sebebi var. Ya bir şeyi yanlış yapıyorsunuz
ya da bu ileride bir soruna neden olabilir.
Bu yüzden tüm uyarılarınızı her zaman düzeltmek istersiniz.
Ve dash wall seçeneği ile derleyerek, tüm
uyarılar giderilene kadar programı doğru kabul etmezsiniz.
Böylece derleme başarısız olmayacaktır. Bu nedenle, derleyicide olup
biten her şeyi görmenin yanı sıra bu seçeneği de kullanmanızı söylüyorum.
Bu nedenle, karşılaşacağınız en yaygın derleyici mesajlarından bazıları,
daha önce bahsettiğimiz en yaygın c sorunlarından bazılarıyla doğrudan
ilişkili olacaktır.
Bir değişken bildirilmemişse, bu işlevi kullanırken önce değişken bildirilmemiş
mesajını görürsünüz.
Bu en yaygın olanlardan biridir ve genellikle tespit edilmesi daha kolaydır.
Ve sonra bu mesajdan önce sembolü
de gösterecektir.
Temel olarak bu değişkeni kullanmaya
çalıştığınızı, ancak aslında hiç bildirmediğinizi söyleyecektir.
Bir değişken bildirdiğinizde veri türünü belirttiğinizi biliyoruz.
Var olmayan değişkenlere veri imzalayamazsınız.
Örtük işlev bildirimi uyarısı, bu işlev bildirimleriyle ilgilidir.
Bir işlevi çağırmaya çalıştığınızda, ancak işlevin
ilişkili herhangi bir uygulaması yoksa. Başlığı dahil etmediniz veya
beyan etmediniz. Yani nerede olduğunu bilmez, fonksiyonun
nasıl tanımlandığını bilmez, argümanları bilmez, dönüş değerini bilmez.
Fonksiyonun kendisi hakkında bilgi yok mu?
Bunu çözmek için, her zaman en üstte bir fonksiyon prototipi bildirin.
Bir başka uyarı da, kontrolün boş olmayan fonksiyonun sonuna ulaştığı uyarısıdır; bu,
bir fonksiyonun boş olmayan bir sonuç döndürdüğü tanımlandığında, ancak fonksiyonda herhangi
bir return ifadesi bulunmadığında gerçekleşir.
Yani verileri iade etmeyi unuttunuz.
Ya fonksiyon, fonksiyon bildiriminden önce veri tipini kaldırmanız gereken
yerde yanlış tanımlanmıştır ya da return ifadesini eklemeyi
unutmuşsunuzdur. Bu uyarıyı düzeltmek için diğerlerinden
birinin değiştirilmesi gerekir.
Ama bunun nasıl bir uyarı olduğunu görüyorsunuz. Yine de orada derleyebilirsiniz, ancak
bu gerçekten programınızda kesme sorunlarına neden olabilir.
Bir işlevin bir şey döndürmesini bekliyorsanız ve döndürmüyorsa, uyarılarınızı kullanılmayan
değişken başka bir yaygın uyarıyı düzeltmek istersiniz.
Bu, bir değişken tanımlandığında derleyici tarafından yazdırılır, ancak asla kullanılmaz.
Kullanmadığınız bir değişkeni bildirmemeniz gerekir,
bu nedenle bu bildirimi kaldırın.
Bazı demolarımı yaparken bu tür sorunlarla sık sık karşılaşıyorum çünkü
hiç kullanmadığım değişkenleri kullanıyorum.
Ya da bir değişkenin nasıl bildirileceğini gösterdiğimde ve sonra
derlediğimi göstermek için derlediğimde, hiç kullanılmadığını söyleyen bir uyarı alırdım.
Sorun değil çünkü ben bir şey gösteriyordum. Ancak kullanılmıyorlarsa
değişkenlerinizi kaldırın. Beyana gerek yok.
Tanımlanmamış referans. Bu, bağlantı aşamasında gerçekleşir.
Bu yüzden derleyiciyi veya derleme aşamasını hatırlayın, derleyecektir.
İlk olarak, ön işlemciyi çalıştıracak, sonra nesne dosyalarını oluşturacak ve daha sonra bu nesne dosyalarını
alacak ve tam bir program yapmak için bunları birbirine bağlayacaktır.
Bu nedenle, bağlama aşaması sırasında,
herhangi bir dış bağımlılığı çözmesi gerekir.
Ya da özellikle çağırdığınız herhangi bir fonksiyonun
bir yerde uygulanması gerekir.
Yani eğer bu nesne dosyası yoksa, size bu sorunu verecektir.
Bir işlevi çağırmaya çalışıyorsunuz, ancak bunun için kodumuz yok.
Bu yüzden ya bu dosyaya bağlantı verdiğinizden
emin olmalısınız.
Genellikle bağlantı sizin için
gerçekleşir, ancak GCC'de bağlantı dosyasını eklemek için sadece dash
l seçeneğini kullanabilirsiniz. Dolayısıyla, math başlık dosyasında bir işlev
kullanıyorsanız, ancak math nesne dosyasına bağlantı vermiyorsanız, bu hatayı alırsınız.
Ayrıca kullanıcı tanımlıysa ve bir c kaynak dosyası
eklemediyseniz de olur.
Yani birden fazla c kaynak dosyanız var.
C kaynak dosyalarından biri bu işlevi uygulamaktadır.
Başka bir c kaynak dosyası başlığı içeriyor ve onu
çağırıyor, ancak uygulamayı
içeren diğer c kaynak dosyasını hiç derlemediyseniz, bu hatayı görürsünüz.
Bu nedenle, bu kaynak dosyayı getirdiğinizden emin olun, açıkça yapmanız gerekiyorsa
herhangi bir standart kütüphane kaynak dosyasını getirdiğinizden emin olun, genellikle bunu yapmak zorunda değilsiniz.
Bir diğer yaygın hata ise, çakışan tipler içindir.
Bu, bir fonksiyon prototipi tanımladığınızda veya bildirdiğinizde ve daha sonra onu uygulamaya
gittiğinizde, bildirdiğinizle aynı olmadığı zamandır.
Örneğin, prototipin bir sonuç türü ve parametreler için parantez adı ve ardından
noktalı virgül vardır.
Ve sonra uygulamayı tanımladığınızda, farklı
bir gerçek işlev başlığına sahip olursunuz.
Farklı bir dönüş türünüz veya farklı sayıda parametreniz vardır.
Bu da diyor ki, hey, bir fonksiyon
bildiriminiz var. Ve sonra bunu aşağıda uygulamaya başladığınızda, tamamen farklı oluyor.
Yani bir uyumsuzluk var.
Ve bu aslında size çelişkiye neden olan önceki tanımda çelişkinin
ortaya çıktığı çizgiyi gösterecektir.
Yani uygulamada genellikle size satırı gösterdiği yerdir çünkü genellikle
işlevlerinizi en üstte bildirirsiniz.
Çalışma zamanı hataları. Çalışma zamanı hataları, kodunuzdaki, programı
derlediğinizde değil, çalıştırdığınızda ortaya çıkan sorunlardır.
Bunlar genellikle çökmelerdir
ya da dizi sınırlarının dışına çıktığınız ya da buna
benzer ölümcül olmayan hatalardır.
Program çalışırken bir tür mantık hatası yaşarsınız.
Bu nedenle, c programlarının yürütülmesi, üstesinden gelemeyeceği bir çalışma zamanı hatası
algılandığında bir çökme ile aniden sona erebilir. Bahsettiğim gibi bir bellek
bozulması var.
Sınır dışı hatalar genellikle programların çökmesine neden olur.
Genellikle göreceğiniz şey segmentasyon hatasıdır.
Ve segmentasyon hatası size gerçekten bir şey söylemez.
Bu nedenle, tipik olarak bu sorunu daha fazla teşhis etmek için yapmak istediğiniz
şey, çağrı yığınına bakmaktır; daha önce de belirttiğim
gibi, programın çökmesine hangi satırın neden olduğunu görmek
için satır satır adım atarak çöker.
Daha önce bahsettiğim gibi bir çekirdek dosyası varsa çağrı yığınını alabilirsiniz.
Ve sonra çağrı yığınından hangi satırın çöktüğünü görebilirsiniz.
Ya da daha iyisi, hata ayıklayıcıyı çalıştırın, satır satır adım atın ve sonra bir satırı çalıştırdığınızda,
hata ayıklayıcı, programın çöktüğünü göreceksiniz ve bu şekilde tanımlayabilirsiniz.
Bunlar derleyici hataları, uyarıları ve mesajları
ve bunların nasıl yorumlanacağı hakkında birkaç ipucu daha.
Aslında internette
bağlantılar var. Ya da Google'da arama
yaparsanız, size üretilebilecek her bir derleyici hatasını
ve uyarısını söyleyecek ve aslında bunun neden üretildiğine
ve sorunun esasen ne olduğuna dair bir tanım
verecektir.
Çünkü yine, bu derleme hataları çok gizemli olabilir.
Ve tek bir kelime bile ulaşılamaz bir kontrol
olduğunu söylüyordu. Eğer bu konuda bir deneyiminiz yoksa, bu açıklamadan
bunun bir fonksiyondan asla bir şey döndürmeyeceğiniz anlamına geldiğini biliyorsunuzdur.
Ancak, derleyici hataları olduğunda ve o derleyiciyi anlamadığınızda
programınızdaki sorunları bulmanın ve düzeltmenin en iyi yollarından biri,
onu google'da aramaktır. Ve genellikle olacak olan şey stack overflow'a gitmektir.
Ve size hey bu sizin hatanız bunu nasıl çözeceğinizi söyleyecektir.
Bunu bugün de yapıyorum.
C dilinde 15 yıldır programlama yapıyorum, ancak hala bazı şeylerle
karşılaşıyorum ve bu tam olarak ne anlama geliyor diye düşünüyorum.
Google'da aratacağım, derleyiciyi alıp tırnak içine alacağım ve bana
tam olarak ne olduğunu söyleyecek.
Stack overflow gerçekten çok iyi bir web sitesidir.
Ve hata ayıklama sürecinde gerçekten çok
zaman kazandırabilir. Derleyiciler veya uyarılar gördüğünüzde sadece tahmin etmeye çalışmayın.
Derleyici size bir şey söylemeye çalışıyor ve tam olarak ne olduğunu tespit edecek.
Yani bunu anlarsanız, sorununuzu çok daha hızlı bir şekilde çözebilirsiniz.
Ve eğer aşina olduğunuz bir şey değilse,
stack overflow'a gidin veya hepsini açıklayan bir web sitesine gidin ve bu
şekilde deşifre edebilirsiniz.
Umarım bu yardımcı olmuştur. Teşekkür ederim.