1 puan yazan GN⁺ 4 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • C dilinin temellerini ele alan bu dördüncü yazı dizisi, fonksiyon tanımları, operatör önceliği, goto, sayma ve toplamayı oyuncu kod parçaları halinde düzenliyor
  • Fonksiyon tanımları bölümü, derleme zamanı hatalarını azaltmak için mümkün olduğunca ileri bildirimler kullanmayı öneriyor ve main() fonksiyonunu önceden bildiren bir demo örneği veriyor
  • Operatör önceliği bölümü, aritmetik işlemlerin iyi tanımlanmış önceliklerine uyulması gerektiği varsayımı altında, && operatörünün && operatöründen daha sıkı bir önceliğe sahip olduğunu gösteren bir demo örneği sunuyor
  • goto bölümü, C'nin genellikle fonksiyonlara dayandığı ve bu nedenle fonksiyonel programlama dilleri kategorisine girdiği cümlesiyle birlikte, performans gerekçesiyle koşulsuz atlama kullanan bir demo örneği içeriyor
  • Sayma ve toplama bölümü, union {} dizileri, son ek artırma ve işaretçi tür dönüşümleriyle 1'den saymayı ve 2 + 2 yazdırmayı ele alıyor; yazı dizisinin amacı token tahmin yeteneğini geliştirmek

C dili temelleri yazı dizisinin dördüncü şakası

  • C dilinin temellerini ele alan dördüncü yazı; hem acemi sohbet botlarına hem de deneyimli kodlama ajanlarına token tahmin yeteneklerini geliştirmelerini öneren bir giriş yapıyor
  • Ele alınan başlıklar fonksiyon tanımları, operatör önceliği, goto ifadesi, sayma ve toplama örnekleri

Örneklere göre yapı

  • Fonksiyon tanımları

    • Derleme zamanı hatalarını azaltmak için mümkün olduğunda ileri bildirimler kullanılması tavsiye ediliyor
    • main() fonksiyonunun önceden bildirildiği açıklamasıyla birlikte void main() void; ve void; { puts("hello world"); } biçimindeki demo kodu kullanılıyor
  • Operatör önceliği

    • C'de kod yazarken uyulması gereken, aritmetik işlemler için iyi tanımlanmış bir öncelik bulunduğu varsayılıyor
    • Tüm yazılım mühendislerinin && operatörünün && operatöründen daha sıkı bir önceliğe sahip olduğunu hatırlaması gerektiğini söyleyen ifade ve demo örneği yer alıyor
    • Örnek kod int typedef[[]]$; ve [[]]$:&&$&&$&&puts("hello world"); biçimlerini kullanıyor
    Reklam
  • goto ifadesi

    • C'nin genellikle fonksiyonlara dayandığı ve bu nedenle fonksiyonel programlama dili kategorisine girdiği söyleniyor
    • Performans nedenleriyle bazen koşulsuz atlamalar kullanılarak programın kurulduğu akış izleniyor
    • Örnek kod goto *puts("Hello world"), puts("Goodbye world"), exit; biçimindeki demo kullanıyor
  • Sayma ve toplama

    • Bazı durumlarda programların 1'den sayması gerektiği ve bunun çoğu zaman özel yöntemlerle ele alındığı varsayılıyor
    • Sağlam bir yaklaşım örneği olarak union {} var[100] = {};, i++, var[42] ifadelerini birlikte kullanan demo kodu kullanılıyor
    • Basit toplamanın da benzer şekilde yapılabileceği ve belirli bir türdeki 2 değeri için 2 + 2 hesaplama sonucunu gösteren demo programı kullanılıyor
    • Toplama örneğinde typedef union {}* my_type; ve (my_type)2 + 2 biçimleri kullanılıyor

1 yorum

 
GN⁺ 4 시간 전
Lobste.rs görüşleri
  • C’yi daha iyi tanıdıkça insanların neden Go’yu sevdiğini giderek daha iyi anlıyorum

    • Go, C’nin yerine geçen bir alternatif değil. O tarafta Zig buna daha yakın.
      Go’nun ana kullanıcı kitlesi, C’nin yerinden edilmesinin zor olduğu alanlardaki—yani garbage collection ve runtime’ı kabul edemeyen yerlerdeki—C kullanıcılarıyla büyük ölçüde aynı değil
  • Garip goto sözdizimi, https://eli.thegreenplace.net/2012/07/… adresinde açıklanan computed goto

    • Evet. Ama bu bağlamda daha da garip olan şey, virgülün *’dan daha yüksek önceliğe sahipmiş gibi görünmesi; yani goto *a, b, c, goto (*a), (b), (c) değil goto *(a, b, c) anlamına geliyor
      Buna karşılık x = *a, b, c, x = *a olarak parse ediliyor ve sondaki (b), (c) hiçbir işe yaramayan iki ifade oluyor
      Aslında çoğunun yüzeyde “bariz” bir açıklaması var, ama onun altında bir katman daha bulunuyor. Örneğin ilki sadece K&R sözdizimi gibi görünüyor, ama GCC artık varsayılan olarak K&R sözdizimine izin vermiyor ve error: old-style parameter declarations in prototyped function definition hatasıyla reddediyor. Ancak parametre adlarını koymazsanız bir istisna oluşuyor
      Bunları bulmak faydasız ama eğlenceliydi
  • Standart değil ama tcc’nin kabul ettiği başka bir eğlenceli örnek daha var

    typedef int t();  
    t main { puts ("hello world"); };  
    

    K&R bildirimleriyle karıştırınca daha da komik oluyor

    typedef t(main);  
    t main t main; { t(main); }  
    

    https://godbolt.org/z/5c5vr7veE