SORU
28 Kasım 2012, ÇARŞAMBA


Nasıl olur &; int main"(){(([](){})());}&; geçerli C ?"

Geçenlerde kodu aşağıdaki ezoterik parçasına rastladım.

int main(){(([](){})());}

Yeniden bunun gibi daha okunabilir hale getirmek için aşağıdaki

int main(){
    (([](){})());   //  Um... what?!?!
}

Ama (([](){})()) geçerli kod nasıl etrafında başımı alamıyorum.

  • İşlev işaretçisi sözdizimini gibi görünmüyor.
  • Bazı operatör numara aşırı olamaz. Kod olarak derlenir.

Google her sembol bu arama ile pek yardımı dokunmadı. Ama Visual Studio 2010 ve çıkışları hiçbir derler. Hatalar ve uyarılar vardı. Geçerli bir kod gibi görünüyor.

Asla Javascript C function pointers dışında çok tuhaf geçerli herhangi bir kod gördüm.

Birisi bu geçerli C olduğunu nasıl açıklayabilir ?

CEVAP
28 Kasım 2012, ÇARŞAMBA


Kod, aslında boş bir lambda çağırır.

Baştan başlayalım: [](){} lambda expression boş.

Daha sonra C ve C , parens ifadeler sarabilirsiniz ve onlar tam olarak aynı şekilde davranıreğer onlar olmadan yazılmış gibi, böylece lambda etrafında parens ilk çifti yapıyor. Şimdi ([](){}) geldik.

Sonra, () ilk kaydırma sonra parens (boş) lambda çağırır. Şimdi ([](){})() geldik

Bütün ifade parens tekrar sarılır ve (([](){})()).

, ; son biter deyim. (([](){})()); varıyoruz.


† VardırbazıT a_var; there's a difference between decltype(a_var) and decltype((a_var))ile en az C köşe doğduğunda.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Google Developers

    Google Devel

    23 AĞUSTOS 2007
  • Michael Neal

    Michael Neal

    2 Mayıs 2009
  • PremiumBeat.com - Royalty Free Music

    PremiumBeat.

    16 Kasım 2008