2012-07-16 18 views
6

Lütfen bana neden farklı davrandığını açıklayın.Çıktı neden farklı?

Bu, çıktıyı stackoverflow8 olarak verir. Daha sonra parantez uzaklaştırmak, ancak:

p = printf("stack"),printf("overflow");stackoverflow5

cevap

13
virgül operatörü atama daha düşük önceliğe (bu bunun için herhangi bir operatör daha düşük önceliğe sahip olan

The Comma Operator

olarak çıktı verir madde), böylece parantezleri kaldırırsanız, ödev ilk önce gerçekleşir ve ikinci ifadenin sonucu atılır. Yani ... Üçüncü çizgisi yani b yeniden deklarasyon olarak yorumlanır gibi bir hata neden olacağını

int a = 10, b = 20; 
int x = (a,b); // x == 20 
int y = a,b; // y == 10 
// equivalent (in terms of assignment) to 
//int y = a; 

Not:

int y = a; 
int b; 

İlk başta bu cevapsız, ama yapar duygusu. a ve b'un ilk bildirimlerinden farklı değildir ve bu durumda virgül bir operatör değildir, bir ayırıcıdır.

+2

int y = a, b; int y = a'ya eşdeğerdir; ve int b; – h4ck3d

+0

Anladım. Teşekkürler. – h4ck3d

+0

@EdS. Kodunuzu gcc ile denedim ve 3. cümlesi "b '" ve "b'" nin önceki tanımlaması hatası veriyor. – abelenky

İlgili konular