2010-05-23 17 views
9

Mam ten fragment kodu i nie wiem jak to działaWeird inicjalizacji w C

#include <stdio.h> 

int main(void) 
{ 
    int numero = ({const int i = 10; i+10;}); 

    printf("%d\n", numero); // Prints 20 

    return 0; 
} 

Dlaczego jeśli usunę drugą część (i + 10), kompilator robi błąd? Dlaczego potrzebne są nawiasy?

Dziękuję ^^!

Odpowiedz

13

To jest GCC statement expression. Wykonuje instrukcje w nim i zwraca wartość ocenianą w ostatniej instrukcji. Tak więc numero jest inicjowane na 20. Jeśli usuniesz drugą część, nie ma wyrażenia jako ostatniej instrukcji, więc nie można uzyskać wartości z wyrażenia instrukcji.

Klamry są niezbędne do odróżnienia ich od zwykłych wyrażeń w nawiasach C.