C Programlama diliyle şamatalar

Başlatan z, 23 Ekim 2011, 15:32:04

z

#135
@Yamak

Bir satirda a=Port; gibi bir atama yapilmis ve daha sonraki satirlarda
....
c=Port;
....
....
e=Port;

benzeri atamalar yapildiysa derleyici, nasil olsa Port degerini a=Port atamasinda okumus ve ogrenmistik artik tekrar okumama gerek yok diyebilir. Ilk okudugu Port degerini c ve e nin de icine yazabilir. Halbuki Port donanima aittir ve ilk okundugu andan sonra farkli degerler icerebilir.

Yada;

Ornegin interrupt rutininde
a=Port atamasi yapildiktan sonra a degiskeni, bu rutinde hic kullanilmamamissa bu bos yere yazilmis bir satir diyebilir. Bu satiri komple kaldirarabilir.

Yada;

bir program parcasinda

Port=1;
.....
.....
Port=2; gibi

atama yapildiysa ve .... satirlarinda Port okuma amacli kullanilmadiysa bu durumda Port=1 gereksiz bir atama olarak gorulebilir.

Bu gibi durumlarda bu komut satirlari, yazdiginiz program satirlarinda var olan fakat cipe ait kodlara eklenmeyen komutlardir.

Volatile eki bu gibi durumlari engeller.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Alıntı yapılan: eistain_54 - 28 Ekim 2011, 18:26:22
konuyu anlamadım.komple yokbnde

Tamam dert etme. Ilk asamalarda zaten bunlarla isimiz olmayacak.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

eistain_54

Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

z

Evet şimdi de C gibi dillerde goto komutu kullanmak hoş değil diyenlerden;

Neden hoş olmadığını açıklamalarını bekliyorum.

Mümkünse örneklerle.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

-Hasan-

Hocam C deyince benim aklıma ilk olarak WHILE döngüleri gelir. C ' de GOTO görmeye pek alışık olmadığım için böyle düşünüyorum.

muhittin_kaplan

Alıntı yapılan: bunalmis - 29 Ekim 2011, 20:38:23
Evet şimdi de C gibi dillerde goto komutu kullanmak hoş değil diyenlerden;

Neden hoş olmadığını açıklamalarını bekliyorum.

Mümkünse örneklerle.
Hocam Konuyu Oradan Oraya Geçiyoruz.
Başlık Diğeri değilmiydi ?

muhittin_kaplan

C programlama dili yada Türevlerinde  Fonksiyon ve Alt program vardır. (Bunların İçerisinde c#, VB.net ve PIC için olan Swordfish de var)
Fonksiyonlarda tanımlanan değişkenler sadece o fonksiyon altında yaşarlar ve fonksiyon sonunda kaybolurlar. (Yukarda Bahsedildi.)
Ayrıca Bu Fonksiyonlardan Oluşturulmuş Dosyaları esasen yazdığımız program dosyasına "INCLUDE" edebiliriz. bu bize okunurluluk ve taşınabilirlilik sağlar. (PC programlamadaki DLL dosyalar gibi)

z

Alıntı yapılan: muhittin_kaplan - 29 Ekim 2011, 21:05:59
Hocam Konuyu Oradan Oraya Geçiyoruz.
Başlık Diğeri değilmiydi ?

Yok orada 3 kişi yazışıyoruz ya o yüzden burada tartışalım dedim.

Şimdi

         a=a+1 yerine a++ kullan
         a=a+5 yerine a+=5 kullan
         goto kullanma denince

iyi C program yazıldığı sanılıyor.

Bana bunu söyleyecek adamın bu kodların altındaki asmlerde neler olduğunu izah edebilmesi lazım.

Keil optimizasyonunu açtığınızda yukarıdaki önerilerin çok ötesinde akla bile gelmeyecek optimizasyonlar yapılıyor.

Label ları güzel yerlere oturttuktan sonra goto ile son derece anlaşılır ve çok kısa kodlar yazabilirsiniz.

Aksini söyleyen varsa buyursun.

Gavur böyle diyor şurda şöyle yazmış demeyin. Yazdığı şeyi tartışmaya getirin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mcan

Alıntı yapılan: muhittin_kaplan - 29 Ekim 2011, 21:10:43

Fonksiyonlarda tanımlanan değişkenler sadece o fonksiyon altında yaşarlar ve fonksiyon sonunda kaybolurlar. (Yukarda Bahsedildi.)

void fonksiyon() {
        static int degisken = 0;
        degisken = degisken + 1;
}

C ye başlayanlar, bu koddaki gibi bazı istisnalara dikkat edin.

mcan

Alıntı yapılan: bunalmis - 29 Ekim 2011, 20:38:23
Evet şimdi de C gibi dillerde goto komutu kullanmak hoş değil diyenlerden;

Neden hoş olmadığını açıklamalarını bekliyorum.

Mümkünse örneklerle.
Ben bazen goto kullanırım işin uzmanı da değilim ancak, bir fonksiyon ya da lib yazdığımızı düşünelim bu fonksiyonun içinde return yerine goto ile main e dallanırsak,fonksiyonun taşınabilirliği zorlaşır, vede stack dan yediğimiz bir alanı geri boşaltmamış oluruz diye aklıma geldi ilk olarak. 

z

Alıntı yapılan: mcan - 29 Ekim 2011, 22:26:50
Ben bazen goto kullanırım işin uzmanı da değilim ancak, bir fonksiyon ya da lib yazdığımızı düşünelim bu fonksiyonun içinde return yerine goto ile main e dallanırsak,fonksiyonun taşınabilirliği zorlaşır, vede stack dan yediğimiz bir alanı geri boşaltmamış oluruz diye aklıma geldi ilk olarak.

ASM derleyicide deseydin anlardım fakat C derleyici,  böyle bir şey yapmana izin vermez. Bu satıra hata verir ve düzeltmeni ister.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mcan

Alıntı yapılan: bunalmis - 29 Ekim 2011, 22:35:18

ASM derleyicide deseydin anlardım fakat C derleyici,  böyle bir şey yapmana izin vermez. Bu satıra hata verir ve düzeltmeni ister.
Bunu bilmiyordum biraz önce denedim ,evet izin vermiyor label yokmuş gibi hata veriyor.Bunu da bu arada fark etmiş oldum karlıyım :)

gambit1244

Alıntı yapılan: mcan - 29 Ekim 2011, 22:26:50
Ben bazen goto kullanırım işin uzmanı da değilim ancak, bir fonksiyon ya da lib yazdığımızı düşünelim bu fonksiyonun içinde return yerine goto ile main e dallanırsak,fonksiyonun taşınabilirliği zorlaşır, vede stack dan yediğimiz bir alanı geri boşaltmamış oluruz diye aklıma geldi ilk olarak.


aynen arkadasımın dedigi gibi biliyorum bende
mantıklı düşününce
kendi yazdıgınız veya hazır fonksiyonları bolca kullanacagınız bir program yazıyorsanız
goto kullanmak nerede oldugunuzu kaybetmenize sebep olabilir.
programa  2 3 ay sonra birşey eklemek gerektiginde tüm yapıyı tekrardan gözden geçirmek gerekebilir
nereye ne eklersem neyin nasıl değişeceğini kestirmek daha zorlaşır
ama  yeri  geldigindede hiçbişey goto nun yerini tutmuyor
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

GreeN

Alıntı yapılan: bunalmis - 29 Ekim 2011, 20:38:23
Evet şimdi de C gibi dillerde goto komutu kullanmak hoş değil diyenlerden;

Neden hoş olmadığını açıklamalarını bekliyorum.

Mümkünse örneklerle.

Harbiden goto sanki c++ içinde bir komut değil gibi.. Benim kafamda sizin sorduğunuz soru şöyle şekillendi ;

"C dilinde GOTO hangi durumlarda kullanılır"

Bence c'dilinin ruhuna aykırı , yani c dilinde her komut disiplinli birer asker , GOTO 'da  sanki disiplinsiz , DİSKO'dan çıkmayan 1 aylık bir asker gibi.

Ama goto'yu nerede kullandın derseniz , iç içe bir iki döngüden acilen çıkmam gereken bir durum olursa (bir değişken izleniyor mesela) program akışında döngilerin bir anlamı kaymıyordur , programın artık başkabir yerden devam etmesi gerektiğinde goto kullanabilirim.
Terörü Lanetliyoruz.

z

#149
Goto yüksek düzeyli bir komuttur. İstediğiniz kadar karmaşık algoritmalar kurun, istediğiniz noktadan Goto ile ayrılabilirsiniz. Alt seviyede bir şeyler staka atılmış registerler değer almış bu sizin sorununuz değil. Komut listesine goto konduysa derleyici gotonun kullanımından doğacak sorunları da çözmüş demektir.

while, for vs komutlarını goto ile uzun yoldan da yapabilirsiniz. Fakat bazı durumlarda goto ile yapacağınız basit işlemleri, while vs de uzun yolan yaparsınız.

En basitinden while dögüsünü break ile kırdığınızı varsayın. Break sizi while'ın çıkışına atar. Fakat ben goto ile çok farklı yere uçabilirim.

C nin doğası dediğiniz ne oluryor ki goto buna aykırı oluyor?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com