SORU
9 Kasım 2008, Pazar


Tam "için" C (ve uyumlu olmaları halinde Diğerleri) döngü sözdizimi nedir?

Diğer insanların kod okurken çok garip for bazı döngüler gördüm. Çabalıyorum aramak için tam sözdizimi açıklama for döngü C ama bu çok zor çünkü kelime "for" görünür alakasız cümleler kuruyorum Arama neredeyse imkansız Google etkili.

Bu soruyu bir daha beni merak yaptı this thread okuduktan sonra aklıma geldi.

for burada:

for(p=0;p =(a&1)*b,a!=1;a>>=1,b<<=1);

Bir virgül iki kod parçaları ayıran orta durumda, bu virgül ne işe yarıyor? a>>=1 b<<=1 hem yapar gibi anlıyorum sağ tarafta virgül.

Ama ne loop çıkış bir durum içinde? a==1 p==0, ya da ne zaman çıkıyor?

Eğer kimse bana bu anlamanıza yardımcı olabilir eğer çok iyi olurdu belki for döngü tam sözdizimi bir açıklama bu yönde bana gelin.

CEVAP
9 Kasım 2008, Pazar


Virgül döngüler için özel değil, virgül operatörüdür.

x = (a, b);

ilk a, b, b değeri için x ayarlayın.

Sözdizimi:

for (init; condition; increment)
    ...

Biraz (continue şimdi break görmezden) eşdeğerdir:

init;
while (condition) {
    ...
    increment;
}

For döngüsü örnek (ilk defa continue break görmezden) eşdeğer

p=0;
while (p =(a&1)*b,a!=1) {
    ...
    a>>=1,b<<=1;
}

Eğer öyle olsaydı, hangi eylemler olarak (tekrar continue break görmezden gelerek):

p=0; 
while (true) {
    p =(a&1)*b;
    if (a == 1) break;
    ...
    a>>=1;
    b<<=1;
}

Yukarıda while döngüsüne basitleştirilmiş dönüşüm olmayan döngü için iki ekstra detaylar:

  • Eğer bu durum belirtilmemişse, her zaman 33 ** (*,* 35*,* 34 veya bir başka döngü sonları sürece sonsuz bir döngüye neden olan).
  • continue eğer bir artış atla olan continue arada bir döngü tersine artış önce bir etiket için bir goto olsaydı, gibi davranır.

Ayrıca, önemli bir ayrıntı hakkında virgül operatörü: bir dizi işaret gibi && || (bu yüzden ben yarısını ayrı tablolar ve tutmak anlamı bozulmadan).


C99'da değiştirir

C99 standardı nüansları bu açıklama daha önce bahsedilmeyen bir kaç C89/C90 için çok iyi olan) tanıttı.

İlk olarak, tüm döngüler kendi başlarına taşlarıdır. Etkili,

for (...) { ... }

pantolon askısı sarılır kendisi

{
for (...) { ... }
}

Standart buyurdu:

ISO/9899:1999 §yurt-Kur 6.8.5 Yineleme ifadeleri IEC

¶5 yineleme deyimi onun kapsamını sıkı bir alt kümesi olan bir blok. blok içine. Döngü gövdesinin de kapsam sıkı bir alt kümesi olan bir blok. yineleme deyimi.

Bu da parantez ekstra set açısından Gerekçe olarak açıklanmıştır.

İkinci olarak, C99 init bölümünde (tek) bir bildirge olabilir

for (int i = 0; i < sizeof(something); i  ) { ... }

Şimdi 'blok döngü etrafında' kendi içine geliyor; i değişken olamaz döngü dışında erişilebilir açıklıyor. sarılı Birden fazla değişken bildirebilirsiniz, ama aynı türden olmalı:

for (int i = 0, j = sizeof(something); i < j; i  , j--) { ... }

Standart buyurdu:

ISO/IEC 9899:1999 §6.8.5.3 deyimi

Deyim

for ( clause-1 ; expression-2 ; expression-3 ) statement

şu şekilde davranır: ifade-2 olduğunu ifade denetleme olduğunu ifade döngü vücudun her infazdan önce değerlendirildi. İfade anlatım-3 döngü vücudun her yürütme sonra geçersiz bir ifade olarak değerlendirdi. Eğer madde-1 ise beyannamesi, bildirir tüm değişkenleri kapsamında bildirimi kalan ve tüm döngü, diğer iki ifade; yürütme sırasına ulaşılır dahil kontrol ifadesi ilk önce bir değerlendirme. Eğer madde-1 ifadesi ise, kontrol ifadesi ilk değerlendirme daha önce geçersiz bir ifade olarak değerlendirdi.133)

Hem Madde-1 ve anlatım-3 atlanmış olabilir. Bir ifade-2 unutulmuş bir değiştirilir sıfır olmayan sabit.

133)Bu nedenle, Madde-1 döngü başlatma, muhtemelen kullanmak için bir veya daha fazla değişkenleri bildirme belirtir döngü kontrolü, ifade, anlatım-2, değerlendirme her yineleme önce yapılan belirtir, döngü yürütme ifadesi kadar devam eder bu böyle 0; ve anlatım-3'e eşit karşılaştırır belirtir her yineleme sonra gerçekleştirilen bir operasyon (artırma gibi).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • BigBoyTV

    BigBoyTV

    25 EYLÜL 2013
  • Damien Walters

    Damien Walte

    20 AĞUSTOS 2006