2013-06-25 2 views
1

Интересно, если код следующий C действует:вложенная структура имя видимость

struct A { 
    struct B { 
     int value; 
    } b; 
}; 

struct B; 

void func1(struct B* b) { 
    b->value = 42; 
} 

void func2() { 
    struct A a; 
    func1(&a.b); 
} 

Этот код компилируется с GCC и работает как можно было бы ожидать, в то время как код проверки жалоб и мне интересно, кто прав, и если это является приемлемым стандартом (C90 или C99) для обозначения struct B в этой форме.

+1

Игнорирование вложенности, 'A A,' не должны компилировать. Это должна быть 'struct A a.'. С этим изменением MSVC также принимает это. – hmjd

+0

Спасибо, 'struct' был потерян, когда я форматировал сообщение, добавив его сейчас. – johannes

+0

что-то скажет? –

ответ

0

Да, вы можете, но вы будете иметь ошибку, если вы хотите использовать STRUCT B вне Struct А.