Öncelik ve değerlendirme sırasını
Öncelik ve birleşim c işleçlerin işlenenleri ifadelerde değerlendirme ve gruplandırma etkiler.Bir işlecin öncelik yalnızca diğer daha yüksek veya düşük öncelik sırasına sahip işleçler varsa anlamlıdır.Önceliği yüksek işleçler ifadelerle ilk olarak değerlendirilir.Word "bağlama tarafından." önceliği de tanımlanabilir Daha yüksek bir öncelik sırasına sahip işleçler daha sıkı bağlama sahip söylenir.
Öncelik ve birleşim özellikleri aşağıdaki tabloda özetlenmiştir (işlenenler değerlendirilen sırası) onlara öncelik en yüksekten en düşük listeleme c işleci.Birkaç işleci birlikte görünür bir yerde eşit önceliğe sahiptir ve bunların birleşim göre değerlendirilir.İşleçler, tablo ile başlayan bölümlerinde açıklanan Sonek operatörleri.Bu bölümün geri kalanında, öncelik ve birleşim özellikleri hakkında genel bilgi verir.
Öncelik ve birleşim özelliklerini c işleçleri
Symbol1 |
İşlem türü |
Birleşim özellikleri |
---|---|---|
[ ] ( ) . – > sonek ++ ve sonek – |
İfade |
Soldan sağa |
Önek ++ ve önek –sizeof & * + – ~! |
Tekli |
Sağdan sola |
typecasts |
Tekli |
Sağdan sola |
* / % |
Çarpma |
Soldan sağa |
+ – |
ADDITIVE |
Soldan sağa |
<< >> |
Bitsel kaydırma |
Soldan sağa |
< > <> = = |
İlişkisel |
Soldan sağa |
== != |
Eşitlik |
Soldan sağa |
& |
Bitsel- ve |
Soldan sağa |
^ |
Özel veya bitwise |
Soldan sağa |
| |
Bitsel-dahil-or |
Soldan sağa |
& & |
Mantıksal- ve |
Soldan sağa |
|| |
Mantıksal or |
Soldan sağa |
?: |
Koşullu deyim |
Sağdan sola |
= *= /= %= += – = <> = = & = ^= |= |
Basit ve bileşik assignment2 |
Sağdan sola |
, |
Sıralı değerlendirme |
Soldan sağa |
1.İşleçler, azalan öncelik sırasına göre listelenmiştir.Birkaç işleci aynı satırda veya grup görünüyorsa, bunlar eşit önceliğe sahiptir.
2.Tüm basit ve bileşik atama operatörleri eşit önceliğe sahiptir.
Bir deyim birkaç operatörleri eşit önceliğe sahip içerebilir.Birkaç işleci bir deyim içinde aynı düzeyde göründüğünde, değerlendirme için birleşim işlecini, sağdan sola veya soldan sağa özelliklerini göre devam eder.Değerlendirme yönünü birden fazla çarpma içeren deyimleri sonuçlarını etkilemez (*), ayrıca (+), veya ikili bitwise (& | ^) işlecini aynı düzeyde.İşlem sırası, dil tarafından tanımlı değil.Derleyici herhangi bir sırada böyle değerlendirebilir boş ise derleyici tutarlı bir sonuç garanti.
Yalnızca sıralı değerlendirme (,), mantıksal- ve (& &), or mantıksal (||), koşullu deyim (? :), ve işlev çağrısı işleçleri sırası noktaları oluşturur ve bu nedenle belirli bir değerlendirme için kendi işlenenleri sırasını garanti.İşlev çağrısı işleci işlev tanımlayıcısını ayraç kümesidir.Sıralı değerlendirme işlecini (,) İşlenenlerini soldan sağa doğru değerlendirmek için garanti edilir.(Virgül operatörünü bir işlev çağrısı içinde sıralı değerlendirme işlecini aynı değildir ve böyle bir garanti sağlamaz unutmayın.) Daha fazla bilgi için bkz: Sıra puan.
Mantıksal işleçler de kendi işlenenleri değerlendirme soldan sağa garanti.Ancak, işlenen ifadenin sonucunu belirlemek için gereken en küçük sayıyı değerlendirin."Değerlendirme short-circuit" denir.Bu nedenle, bazı işlenen ifade değerlendirilecek değil.Örneğin, deyim
x && y++
ikinci işlenen y++, yalnızca değerlendirilir x ise true (sıfırdan farklı).Bu nedenle, y , artmaz x False (0).
Örnekler
Aşağıdaki listede, derleyici birkaç örnek ifadeleri otomatik olarak bağlar nasıl gösterir:
İfade |
Otomatik bağlama |
---|---|
a & b || c |
(a & b) || c |
a = b || c |
a = (b || c) |
q && r || s-- |
(q && r) || s–– |
İlk ifadesinde, bit- ve işleci (&) veya mantıksal işleci daha yüksek önceliğe sahiptir (||), bunu a & b veya mantıksal işleci birinci işleneni oluşturur.
İkinci ifade, veya mantıksal işleci (||) basit atama işleci daha yüksek önceliğe sahiptir (=), bunu b || c atamasında sað iþlenen olarak gruplandırılır.Atanan değeri Not a 0 veya 1.
Üçüncü ifade, beklenmeyen bir sonuç üretebilir doğru biçimlendirilmiş bir ifadeyi gösterir.Mantıksal- ve işleci (&&) veya mantıksal işleci daha yüksek önceliğe sahiptir (||), bunu q && r işlenen gruplandırılır.Mantıksal işleçlerin işlenenleri değerlendirme soldan sağa, garanti bu yana q && r önce değerlendirilir s––.Ancak, q && r sıfır dışında bir değere değerlendirilen s–– değerlendirilmesi değil, ve s küçültülüyor değil.Azaltma değil, s programınızda bir sorun neden s–– ifadenin birinci işlenenin görünmesi gereken veya s ayrı bir işlemde indirildiği düğümlerde olmalıdır.
Aşağıdaki deyim geçersiz ve derleme zamanında bir tanılama iletisi üretir:
Geçersiz ifade |
Varsayılan gruplandırma |
---|---|
p == 0 ? p += 1: p += 2 |
( p == 0 ? p += 1 : p ) += 2 |
Bu ifadede, Eşitlik işlecini (==) dolayısıyla en yüksek önceliğe sahip p == 0 işlenen gruplandırılır.Koşullu ifade işleci (? :) sonraki en yüksek önceliğe sahiptir.Onun ilk işleneninin p == 0, ve onun ikinci işlenen p += 1.Ancak, son işlenen koşullu ifade işleci olarak kabul edilir p yerine p += 2, bu oluşumu, beri p koşullu ifade işleci bileşik atama işleci sakladığından daha yakın bağlar.Bir sözdizimi hatası nedeniyle oluşur += 2 sol işleç değişkeni yok.Bu tür hataları önlemek ve daha okunabilir kod üretmek için ayraç kullanmanız gerekir.Örneğin, parantez aşağıda gösterildiği gibi düzeltin ve önceki örnekte açıklığa kavuşturmak için kullanabilirsiniz:
( p == 0 ) ? ( p += 1 ) : ( p += 2 )