Neden bu (kullanarak ) tanımsız davranış oluşturur. | Netgez.com
SORU
4 HAZİRAN 2009, PERŞEMBE


Neden bu (kullanarak ) tanımsız davranış oluşturur.

int main(int argc, char ** argv)
{
   int i = 0;
   i = i       i;
   printf("%d\n", i); // 3

   i = 1;
   i = (i  );
   printf("%d\n", i); // 2 Should be 1, no ?

   volatile int u = 0;
   u = u       u;
   printf("%d\n", u); // 1

   u = 1;
   u = (u  );
   printf("%d\n", u); // 2 Should also be one, no ?

   register int v = 0;
   v = v       v;
   printf("%d\n", v); // 3 (Should be the same as u ?)
}

CEVAP
4 HAZİRAN 2009, PERŞEMBE


C tanımsız davranış kavramı vardır, yani bazı dil yapıları kodunu çalıştırdığınızda, sözdizimsel davranışlarını tahmin edemezsin geçerli ama.

Bildiğim kadarıyla, standart açıkça söylemiyornedentanımsız davranış kavramı var. Aklımda, çünkü dil tasarımcılar istedim orada olmak için bir yol olarak mantığı yerine, yani gerektiren tüm uygulamaları ele tamsayı taşması aynı şekilde, çok büyük olasılıkla empoze ciddi performans maliyetleri, gittiler davranışı tanımsız böylece eğer yazdığınız kod neden tamsayı taşması, her şey olabilir.

Aklımda o varken, neden bu "sorunlar"? Dili açıkça belli şeyler undefined behavior yol olduğunu söylüyor. Sorun yok "olmalı" dahil. hayır yok Eğer tanımsız davranışla ilgili değişkenlerin bir volatile, bildirirken değişiklik olursa veya bir şey kanıtlamak değiştirmez.tanımsız; davranışları hakkında bir sebep olamaz.

İlginç-loooking en örnek olan

u = (u  );

metin-kitap tanımsız davranış (sequence points Wikipedia girdisi) örneği.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 24 Канал

    24 КанаÐ

    5 ÅžUBAT 2006
  • LounaTutorials

    LounaTutoria

    10 EYLÜL 2009
  • steeletraining

    steeletraini

    28 NİSAN 2010