SORU
29 AĞUSTOS 2013, PERŞEMBE


-While(0); C hack önlemek için bazı iyi yolları nelerdir ?

Kod akışı böyle olduğunda:

if(check())
{
  ...
  ...
  if(check())
  {
    ...
    ...
    if(check())
    {
      ...
      ...
    }
  }
}

Genellikle bu etrafında yukarıda dağınık kod akışını önlemek için çalışma gördüm:

do {
    if(!check()) break;
    ...
    ...
    if(!check()) break;
    ...
    ...
    if(!check()) break;
    ...
    ...
} while(0);

Bunu önlemek için bazı iyi yolları iş çevresinde/üst düzey (endüstri seviyesi) bir kod olur o kadar hack nedir?

Kutunun dışında, herhangi bir öneri bekliyoruz!

CEVAP
29 AĞUSTOS 2013, PERŞEMBE


Kimi durumlarda kullanma goto aslında DOĞRU cevap - en az duyanlara değil yetişmiş dini inanç "goto ... asla bir cevap, ne olursa olsun asıl soru şu," - ve bu bir vaka.

Bu kod break goto soyunma tek için do { ... } while(0); kesmek amacıyla kullanıyor. Eğer goto, kullanmak için gidiyoruz eğer bu konuda açık olun. Kod okumak için DAHA da zorlaştıran bir anlamı yok.

Belirli bir durum sadece oldukça karmaşık koşulları ile bir sürü kod var

void func()
{
   setup of lots of stuff
   ...
   if (condition)
   {
      ... 
      ...
      if (!other condition)
      {
          ...
          if (another condition)
          {
              ... 
              if (yet another condition)
              {
                  ...
                  if (...)
                     ... 
              }
          }
      }
  .... 

  }
  finish up. 
}

Aslında kod doğru olduğunu daha NET gibi karmaşık bir mantığa sahip değil.

void func()
{
   setup of lots of stuff
   ...
   if (!condition)
   {
      goto finish;
   }
   ... 
   ...
   if (other condition)
   {
      goto finish;
   }
   ...
   if (!another condition)
   {
      goto finish;
   }
   ... 
   if (!yet another condition)
   {
      goto finish;
   }
   ... 
   .... 
   if (...)
         ...    // No need to use goto here. 
 finish:
   finish up. 
}

Edıt: açıklığa kavuşturmak İçin, hiçbir şekilde genel bir çözüm olarak goto kullanılmasını teklif ediyorum. Ama goto diğer çözümlerden daha iyi bir çözüm olduğu durumlar vardır.

Düşünün örneğin bizim bazı veri toplama ve farklı koşullarda test edilmiştir olmak için bir çeşit "bu son bilgi toplanan" - hangi bağlı bir çeşit "devam/son" işaretleri değişen bağlı olarak Neredesin veri akışı.

İşimiz bittiğinde, verileri bir dosyaya kaydetmek için ihtiyacımız var.

Ve evet, genellikle makul bir çözüm sağlayacak başka çözümler vardır, ama her zaman değil.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Engadget

    Engadget

    18 EYLÜL 2006
  • Stevie

    Stevie

    2 Mayıs 2010
  • TheDigiCraft

    TheDigiCraft

    25 NİSAN 2011