If a=1, how does ++a + ++a=6?

Answer by Aparajita Raychaudhury:

Oh dear! Indian teachers will never learn not to set this question. Ironically enough I have failed to explain to them why this a++ + ++a bullshit is totally nonsensical. They just love this question.

Like the only other correct answer on the page mentions, the behaviour is undefined. Which means a compiler can do exactly as it pleases when asked to convert this statement. It can convert in such a way that you get 5 or 6 or 99 or it could create code to wipe off your entire hard drive. It would still be a perfectly valid C compiler.

I wrote a pretty detailed explanation somewhere else on Quora, but unfortunately I can’t find it anymore. http://stackoverflow.com/questio… has every detail (and more) that you can ever want to know on the topic, with pretty useful links to further resources. But Stack Overflow can be a little overwhelming, so let me try putting this in simpler terms. (I may sacrifice absolute accuracy to understandability, so I suggest you go read the SO thread for the real deal, once you understand my approximation). [Edit: http://blog.regehr.org/archives/213 is a much better introduction to the topic though.]

C has a concept known as ‘sequence points’. Sequence points are basically a point in your code where the compiler guarantees to have finished off all evalutations. For example, a semi-colon at the end of a statement is a sequence point. So a C compiler guarantees that before it moves to the next code after a semi-colon, it will finish doing everything before the semicolon. So when you write a=b+c; printf(“%d”, a);, you know a will be printed as whatever is b+c, because there is a sequence point before printf, and hence the compiler guaranteed to finish the calculation before starting to print. But what order the C compiler executes statements within a sequence point can not be guaranteed. For example, if you write a=b++ + c++; you can’t guarantee whether b will be incremented first or c. In most cases it doesn’t matter, because no one cares what order it is evaluated in. But in some cases it does.

Now to come to undefined behaviour. The C language standard says that the value of a variable can change at most once within a single sequence point. If a code attempts to change a variable’s value more than once within the same sequence point, it is undefined behaviour. Which means the C compiler can do exactly whatever it wants. It can even format your root drive. Anything is fine.

So when you do something like a++ + ++a, you are attempting to change the value of variable a twice within the same sequence point. This is not allowed. Since you defied the holy laws of C, now the compiler can do anything it wants. And apparently it does. Which is why in your case it says 6, whereas other people using other compilers (or other versions of your compiler) get 5. It can even say 99. Or -99. Anything is correct. Because you broke the Holy Commandment. Which is why Sergey says that the answers you get is non-sensical. It could be just some random value the compiler decided to spit out on the spur of the moment.

And the worst part is, a single piece of undefined code makes the entire program undefined. The compiler can do absolutely anything it pleases, because, yeah, you know, you broke the law.

Good luck getting your teachers to even recognise the law though.

If a=1, how does ++a + ++a=6?

DigitalOcean ile VPS’e ilk adım

Digital Ocean vs Linode şeklinde aratırsanız çeşitli tartışmaları avantajları dezavantajları göreceksinizdir. Ben Digital Ocean‘ı tercih ettim. Kullanım kolaylığı olarak çok memnunum tavsiye ederim.

Bu link aracılığıyla kaydolursanız $10 krediniz de benden.

SSH key ekleme

1.Kontrol

Bilgisayarınızda önceden oluşturmuş id_rsa id_rsa.pub dosyaları var mı diye kontrol edin.

ls -al ~/.ssh

bilgisayarınızda önceden oluşturulmuş ssh key varsa 3. adıma geçin yoksa 2.adımdan devam edin.

2.SSH key oluşturun

ssh-keygen -t rsa

ya da direkt olarak ssh-keygen komutunu çalıştırın. Sizden passphrase isteyecek boş geçebilir ya da istediğiniz bir şifreyi seçebilirsiniz.

ana dizininize ($HOME) .ssh klasörü açıp id_rsa ve id_rsa.pub dosyalarını atmış olmalı.

3. DigitalOcean a SSH ekleme

bu kısımda mantık basit oluşturduğunuz dosyayı metin editörüyle açıp digitalocean da ssh key ekle seçeneğiyle açılan kısma yapıştıracak ve bir isim vereceksiniz.

Metin editörü ile açmak istemezseniz dosya içeriğini komple panoya kopyalan xclip uygulamasını kullanabilirsiniz Continue reading DigitalOcean ile VPS’e ilk adım

Android için Kodi (XBMC) nasıl (Compile edilir) derlenir

Öncelikle Android derleme çevreniz (anroid build environment) hazır olmalı. Şurda anlatıldığı şekilde çalışma ortamınızı hazırlarsanız xbmc nin Android compile etmek için gösterdiği adımların çoğunu atlamış olacağız ve gerçekten en temiz ve en kısa Android environmet hazırlama rehberidir.

xbmc Android derleme dökümanı

Hangi XBMC sürümünü derleyeceğinizi seçmenizde fayda var şu an XBMC 14 sürümünde isim değiştirip Kodi ismini aldı ve çoğu tema 14 sürümünü (henüz) desteklemiyor. Continue reading Android için Kodi (XBMC) nasıl (Compile edilir) derlenir

Lubuntu 14.04 network manager simgesi kayboldu

Not: Normalde böyle sorun çözümleri paylaşmayı sevmem fakat başıma geldi ve çok can sıkıcı bir durum olduğu için çözümünü paylaşmak istedim. Takipçilerimin affına sığınıyorum.

Lubuntu da bir sebeple sağ alttaki ağ simgesi kaybolduysa ve nm-applet olarak bilinen ağ aramayı sağlayan uygulamaya erişemiyorsanız,

Lubuntu açılırken lubuntu simgesi altında network manager ile ilgili hatalar çıkıyor ve boot uzun sürüyor ya da bitmiyorsa, Continue reading Lubuntu 14.04 network manager simgesi kayboldu

Ubuntu Workgroup değiştirme [Linux]

Linux üzerinde varsayılan olarak gelen WORKGROUP domain grubumuzu değiştireceğiz.

Ubuntu üzerinden anlatacağım farklılık gösterebilir.

Home [Ev] dizininde bir klasör açın ya da var olan bir klasörü paylaşmaya çalışın. Ubuntu üzerinde klasör özelliklerinde son sekmede bulunuyor.

 

Paylaş dedikten sonra eğer paylaşım servisi yüklü değilse onun uyarısını veriyor ve yüklensin mi diyor yükle deyip devam ediyoruz. Karşımıza çıkan uyarıları takip ederek servis yüklemesi ve yapılması gerekenleri bitirdikten sonra sıra geldi workgroup adını değiştirmeye.

Workgroup ismi /etc/samba/smb.conf dosyası içerisinde tutuluyor. Düzenleyebilmek için ister favori metin editörünüz ile yönetici haklarını vererek komut satırından çağırın isterse nautilus’a yönetici haklarını vererek dosyayı gidip açın. Örneğin: Continue reading Ubuntu Workgroup değiştirme [Linux]

Jetpack ile wordpress olmayan bir sitenin ulaşılabilirliğini kontrol etmek

Tesadüfen karşılaştığım bir durumu yazıyorum bu yazımda.

Yeni bir alan adı aldım. Yapmayı planladığım siteyi yapana kadar hem hosting firmasını denemek hem de belki wordpress ile de devam edebilirim diye direkt olarak wordpress kurdum.

WordPress kurunca yapılması gerekenlerin başında Jetpack eklentisini yüklemek geliyor tabi. Eklentiyi yükledim wordpress hesabımla giriş yaptım bazı özellikleri aktifleştirdim. Aktifleştirdiğim bazı özelliklerden birisi de Jetpack’in Monitor (izleme diyelim) özelliği. Siteniz ulaşılabilir mi değil mi takibini yapan yeri geldiğinde bilgilendirme amaçlı mail atan bir hizmet.

Neyse gün oldu devran döndü ben wordpress’i kullanmamaya karar verdim ve o alan adından wordpress kurulumunu kaldırdım ve yeni bir site kurdum.

Voila! Yazıyı yazmama sebep olan konu da tam burda ortaya çıktı. Jetpack “sağolsun” halen daha benim alan adımı kontrol ediyordu. Sürekli durum bilgisi içeren mailler atıyordu.

Selam abbaselmas,

Jetpack Monitor görev başında, ******* blogunu sürekli takip ediyor. Cuma, Eylül 5, 6:30 am günü yaptığımız son kontrolde sitenizin kapalı olduğunu fark ettik.

Yeni sitemin ulaşılabilirliğini kontrol etmek için bir hizmet kullanmama gerek kalmadı. Ne kadar süre takip eder wordpress olmadığını anlar da kızar mı bu yazımda sizleri tekrar bilgilendireceğim.

Bu arada websitenizin ulaşılabilirliğini kontrol etmenizi sağlayacak benim de abbaselmas.com da kullandığım ücretsiz bir yöntem var. Google Docs ve Google Scripts kullanılarak yapılıyor. Nasıl yapıldığını buradan bulabilrsiniz.

Okuduğunuz için teşekkür ederim.

Ekran çözünürlüğü arttırma – netbook windows

İkinci el bir Netbook satın aldım ve Windows 7 (daha doğrusu Tiny7) yükledim çok da güzel oldu. Kullanmam gereken bir program ekran çözünürlüğünü minimum 1024×768 istediği için ekran çözünürlüğünü değiştirme yöntemi aradım ve basit bir registry değişikliği ile netbook’un önceden desteklemediği fakat windows ile gelen iki yeni çözünürlüğü aktifleştirebildim.

  • Öncelikle regedit ‘i çalıştırın.
  • “Display1_DownScalingSupported” söz dizisini aratın ve “0” olan değerini “1” ile değiştirin.
  • Bilgisayarınızı yeniden başlatın.
  • İki yeni çözünürlüğünüzü ekran çözünürlüğü ayarlarında görebilirsiniz.

Okuduğunuz için teşekkür ederim.

BlackBerry Torch 9800 ile BIS/BES olmadan internet kullanma çabam..!

Geçici kullanabileceğim pahalı olmayan bir telefon arayışındaydım. BlackBerry olarak Torch 9800 modeli düşünüyordum. Açıkçası çok araştırmadım ikinci eli çok da pahalı bir telefon değildi işime geldi aldım. (En azından İzmir’de pahalı değildi. Neden pahalı olmadığını da öğrenmiş oldum internet paketi bis bes,  güncellleme eksikliği bazı konulardaki yavaşlığı gibi sebepler insanları BB den soğutmuş haklılar da)

Torch gerçekten güzel bir telefon; kızağı olsun kamerası olsun dokunmatiği olsun güzel bir telefon. Gel gelelim yazılım konusunda aynı fikirde değilim. Yazma Silme Okuma olarak tanımlayabileceğim işlemlerde müthiş bir yavaşlık söz konusu. Telefonu kapatıp açmak dakikar sürüyor. Aldığımda güvenlik temizlemesi yaptım yaklaşık 2 saat sürdü. 100kB’ı geçmeyen uygulamayı kaldırmak bir dakika alıyor. Ama en can alıcı nokta BB kendi internet servisini kullanmaya zorluyormuş alırken bilmiyordum. Ne demek bu şimdi! Vodafone dan diğer operatörlerden satın aldığınız internet paketleri BB telefonlarında çalışmıyor kullanamıyorsunuz. Müşteri Hizmetlerini aradığınızda size söyledikleri BB için ayrı internet paketi sattıkları oluyor. Cihaz ayarı konusunda dahi yardım etmiyorlar. (Vodafone için konuşuyorum bu arada diğerlerinin de farklı olduğunu sanmıyorum açıkçası, yanlışsam uyarın) Continue reading BlackBerry Torch 9800 ile BIS/BES olmadan internet kullanma çabam..!

Windows için Github destekli metin editörü – Atom.io

Bildiğiniz üzere Github biz programcılar arasında popüler bir platform ve programcılara destek olma işlerimizi kolaylaştırmak belki ileride kendi platformlarına entegre etmek için bir metin editörü yayınladı; Atom. Malesef bu metin editörü ilk çıktığı zamanlarda kapalı beta ile yayıldı şu anda herkese açık ve Open source oldu. Atom.io sitesinden de indirip kullanabileceğiniz metin editörü şu an resmi olarak sadece Mac için var. Diğer platformlar için yükleme yöntemleri de mevcut tabi open source bir platformda olmasaydı garip olurdu. Neyse ben bu yazımda Windows üzerine nasıl kurulur onu anlatacağım. Belirtmekte fayda görüyorum geç keşfetsem de Sublime text editörünü kullanıyorum ve çok severim Atom ‘u biraz ona benzettim belki de çoğu progracının istediği şeyler aynı olduğu için olabilir. Continue reading Windows için Github destekli metin editörü – Atom.io