Programlama hakkında çok bilinmediğini düşündüğünüz bir bilgi bırakın

@TheAny
Yani Online zaten güzel bir ortam değil. C diyorsak aklımıza C11 gelmesi lazım. Standart versiyon bu çünkü. C11'de de buna izin verilmez çünkü büyük hatalar oluşabilir. Artık onda da verirse farklı bir durum söz konusu çünkü ben zaten derleyip çalıştıramadım olmaz çünkü.
Yani bunu çalıştırsanız da bir şey fark etmez üstteki fonksiyonu hiçbir zaman çalıştıramayacaksınız.
Online compiler kullanmadım son seferde. GCC 4.9.2, C99 ile çıktı aldım. Yani yine de demek istediğin şeyi anlıyorum. Derste biz de C'de fonksiyonların main functiondan önce tanımlanarak yazılması gerektiği şeklinde öğrendik. Ancak günümüzde IDE ve compilerlar bunu görmezden gelip senin yerine function prototype oluşturabiliyor. Uyarının sebebi bu. Örtülü tanımlanmış fonksiyon diyor uyarıda.
 
@TheAny
Aslında günümüzde değil günümüz versiyonlarından önce dediğin şeyleri yapıyordu. Artı olarak senin için oluşturmuyor eğer öyle yapsaydı düzgün bir şekilde struct döndürürdüm. Toplama yaparsın ama imza vermeden program yazamazsın patlar. Eğer ki senin editörün senin için oluşturuyorsa yazdığım fonksiyonu çalıştırması gerekir. Eğer çalıştırıyorsa kabul edeceğim ki C'de a programını kullanalım bu oluyor. Ancak adım kadar eminim ki patlaması lazım.
Zaman ayırdığın için teşekkür ederim ve emeğin için eline sağlık güzel bir tartışma oldu.
 
C dilini bilenler bunu bilir ama yine de söyleyeyim. Main fonksiyondan sonra yazılan fonksiyonlar okunmaz. C'de bir fonksiyonun okunması için onu main fonksiyondan önce yazmak gerekir. İlla sonra yazacağım diyorsan ise main fonksiyondan önce tanımlayacağın fonksiyonun imzasını atmak gerekir.

Bir bilgi daha vereyim. #define komutu ile makrolar tanımlayarak C dilini Türkçe'ye çevirmek mümkün. Yani " yazdir("merhaba dunya") " gibi bir şey yapılabilir.

Bu dediklerimi C için dedim. Tabii ki diğer programlama dillerinde main fonksiyondan sonra yazılan fonksiyonlar okunabilir.
Teknik olarak bu doğru değil. main() ile alakası yok olayın. Bir sembolü referanslamadan önce derleyicinin o sembolün bildirisini(declaration) görmüş olması gerekir. Aksi takdirde hata alırsın.

Ek olarak main() varsayılan giriş noktasıdır. Bunu değiştirip mehmet() yapabilirsin.
 
Teknik olarak bu doğru değil. main() ile alakası yok olayın. Bir sembolü referanslamadan önce derleyicinin o sembolün bildirisini(declaration) görmüş olması gerekir. Aksi takdirde hata alırsın.

Ek olarak main() varsayılan giriş noktasıdır. Bunu değiştirip mehmet() yapabilirsin.
Main'i
Kod:
main()
olarak değil ana fonksiyon olarak dedim. C dilinde kullandığın ana fonksiyon manasında.
 
Main'i
Kod:
main()
olarak değil ana fonksiyon olarak dedim. C dilinde kullandığın ana fonksiyon manasında.
Yine farketmez. İstersen Main içinde foo.h include et. foo.c içinde yukarıda lol() altında lel() tanımla ve lol() içinde lel() çağır. Hata almalısın.

lol()'un bildirisini foo.h'ye ekle ama lel() direkt foo.cde tanınlı olsun bildiri olmadan.
 
Eğer çalıştırıyorsa kabul edeceğim ki C'de a programını kullanalım bu oluyor. Ancak adım kadar eminim ki patlaması lazım.
Struct'ta patlıyor.

Zaman ayırdığın için teşekkür ederim ve emeğin için eline sağlık güzel bir tartışma oldu.
Seninde. ^^

Struct'ta patlıyor.
Basic functionlar veya inline function olabilecek functionlar için function prototyping yapıyor olabilir yada doğrudan inline function olarak çalıştırıyor olabilir compiler. Sonuçta toplamada herhangi bir yapı söz konusu değil. Makro gibi daha çok.
 
Basic functionlar veya inline function olabilecek functionlar için function prototyping yapıyor olabilir yada doğrudan inline function olarak çalıştırıyor olabilir compiler.
Olay şu;
 
Yine farketmez. İstersen Main içinde foo.h include et. foo.c içinde yukarıda lol() altında lel() tanımla ve lol() içinde lel() çağır. Hata almalısın.

lol()'un bildirisini foo.h'ye ekle ama lel() direkt foo.cde tanınlı olsun bildiri olmadan.
Ekran görüntüsü 2022-10-04 173707.png
Ekran görüntüsü 2022-10-04 173744.png
Dostum bahsetmeye çalıştığım buydu. Eğer fonksiyon imzasını atmazsan "[Error] 'toplama' was not declared in this scope" hatasını verir.
 
Eki Görüntüle 1535440
Eki Görüntüle 1535442
Dostum bahsetmeye çalıştığım buydu. Eğer fonksiyon imzasını atmazsan "[Error] 'toplama' was not declared in this scope" hatasını verir.
Tamam ben de bunun ne main()'e ne de Main'e özel bir şey olmadığını anlatmaya çalışıyorum. Her translation unit (derleyiciye gösterdiğin her kaynak dosyası) için referansladığın sembolün en azından bildirisinin referans noktasından önce verilmiş olması gerekir.
 

Geri
Yukarı