i+++j
i++ + j
eşdeğerdir.
Bu, operatörün önceliği ile ilgisi yoktur. İfadeler ayrıştırılmadan önce +++
, derleyici tarafından ++ +
olarak çözülür.
C standardı, her biri bir öncekinin çıkışını kullanarak çeviri fazı dizisini tanımlar. +++
, 3. aşamada ++ +
olarak çözülür, bu da kaynağı önişlemci jetonlarına ayrıştırır. Operatör önceliği faz 7, sözdizimsel ve semantik analize kadar dikkate alınmaz. (Çeviri fazlar ayrı evrede olarak uygulanması gerekir ya geçer, fakat derleyici oldukları gibi davranır gerekir yoktur.)
+++
++ +
karar olup + ++
gayri adlandırılan şeydir diyor kurallar " maksimal munch kuralı ". Bu bölüm, 6.4 paragraf 4 de belirtildiği: giriş akımı bir verilen karaktere kadar belirteçleri ön işleme ayrıştırıldı edilmiştir
, bir sonraki ön işleme belirteci bir ön işleme belirteci teşkil edebilir karakter uzun dizi olup.
(Eğlenceli, endeks için "maksimal munch" anlamına gelir, ama bu terim standardında başka bir yerde söz edilmez.)
Bu aynı zamanda olarak simgeleþtirilmiþ edilebileceğini i+++++j
, ima geçerli ifade i++ + ++j
, aslında bir sözdizimi hatası olan i ++ ++ + j
. i++ + j
: Elbette
çözümü, bir programcı için, net dizgeciklerine bölünme yapmak için boşluk eklemektir. (i+++j
derleyici çok açıktır, ama i++ + j
bir insan okuyucuya çok daha nettir.)
Referans: N1570, bölüm 6.4, paragraf 4. N1570 2011, ISO C standardının bir taslağıdır. Bu kural, standartın önceki sürümlerinden değiştirilmemiştir. Çeviri aşamaları tartışılmıştır
Evet, Postfix artış/azaltma yüksek önceliğe sahiptir. –
Çok fazla kopyalar var, ancak +++ olarak adlandırılması zor bir arama terimi gibi görünmüyor. –
@ShashankKadne: Operatör önceliği ile ilgisi yok. –