Aynı değeri birkaç kere farklı artırmak

Başlatan Neof07, 20 Ocak 2017 - 22:17:22

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Neof07

Merhaba, bu konuyu daha önceden danışmıştım forumda ancak farklı birşey daha buldum bunuda paylaşmak istedim.

int i=1;
printf("%d %d - %d",i,i++,++i);


Şimdi benim bildiğimle şöyle olması gerekiyordu;

1- En sağdan başla i değerini bir artır ve printfe gönder.
2- 2. parametreye geç (sağdan) i'nin değerini printfe gönder(2) ve i'yi artır(3).
3- i'nin en son halini yazdır

Yani (3 2-2) olması gerekiyor benim düşündüğüme göre ancak(3 2 - 3) oluyor. En sağda ki neden 3 ?

erdemakin09

Konun ilgimi çekti araştırdım nette. Anladığım kadarı ile c dilinde Undefined behavior kavramı ile alakalı bir durummuş. Konu ile alakalı bağlantıları paylaştım. Bakmak istersen bakabilirsin.

http://en.cppreference.com/w/cpp/language/eval_order
http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points
http://blog.regehr.org/archives/213
http://stackoverflow.com/questions/1270370/printfd-d-d-n-a-a-a-output
http://stackoverflow.com/questions/949433/why-are-these-constructs-using-undefined-behavior

Bu arada link vermek yasak ise mesaj atarak yada mesajı alıntılayarak cevaplarsanız kaldırırım.
Her Can Bir Gün Ölümü Tadacaktır!

Neof07

#2
@erdemakin09, araştırma yaparken nasıl araştırdınız merak ettim de ? Güzel olmuş ama ingilizcem pek iyi değil biraz zaman alıcak anlamam :D

Tanımsız bir ifade sanırım o yüzden standart olmadığı için derleyici herhangi bir çıktı üretebiliyormuş anladığım kadarıyla.

erdemakin09

Alıntı yapılan: Neof07 - 21 Ocak 2017 - 10:40:31
@erdemakin09, araştırma yaparken nasıl araştırdınız merak ettim de ? Güzel olmuş ama ingilizcem pek iyi değil biraz zaman alıcak anlamam :D

Tanımsız bir ifade sanırım o yüzden standart olmadığı için derleyici herhangi bir çıktı üretebiliyormuş anladığım kadarıyla.

Bunu ararken direk printf kısmını google yapıştırıp aradım :D

Ama normalde arama yaparken how to yapısını kullanıyorum. How to ile ne arasam buldum bugüne kadar :D
Her Can Bir Gün Ölümü Tadacaktır!

Neof07

Çok mantıklı :D Bu konu standart olmadığı için böyle değilde daha güvenilir bir şekilde yapılırsa sorunda olmucaktır herhalde.

erdemakin09

Alıntı yapılan: Neof07 - 21 Ocak 2017 - 13:11:33
Çok mantıklı :D Bu konu standart olmadığı için böyle değilde daha güvenilir bir şekilde yapılırsa sorunda olmucaktır herhalde.

Zaten stackoverwolf linkinde birisi böyle bir kod yazmanın çok yanlış olduğunu bahsetmiş. Bu gibi durumlarda genellikle ayırmak daha mantıklı olacaktır. Üstelik bu kod doğru bile çalışsa çok fazla makarna olacaktır okunurluğu az olacaktır. :)
Her Can Bir Gün Ölümü Tadacaktır!