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

  • GUN-TIME with Brandon

    GUN-TIME wit

    3 ŞUBAT 2009
  • Jonah Penna

    Jonah Penna

    11 EYLÜL 2005
  • NicoleGrippo

    NicoleGrippo

    14 Kasım 2006