2013-06-25 5 views
1

Je me demande si le code C suivant est valide:visibilité nom structure imbriquée

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); 
} 

Ce code est compilé avec gcc et fonctionne comme on pouvait s'y attendre alors qu'un vérificateur de code se plaint et je me demande qui est juste et si cela est acceptable par la norme (C90 ou C99) de se référer à struct B sous cette forme.

+1

Ignorer l'imbrication, 'A a,' ne devrait pas compiler. Ce doit être 'struct A a '. Avec ce changement, MSVC accepte également cela. – hmjd

+0

Merci, le 'struct' a été perdu pendant que je formais le message, l'a ajouté maintenant. – johannes

+0

que dit-on? –

Répondre

0

Oui, vous pouvez, mais vous aurez une erreur si vous voulez utiliser struct B en dehors struct A.

Questions connexes