2011-07-18 3 views
2
int main() 
{ 
    // forward declaration 
    struct myStruct_st *mS; // Note that this will expand as "struct struct myStruct_st *mS which does not make any sense to me" 

    return 0; 
} 

// definition of myStruct_s 
typedef struct myStruct_s 
{ 
    int x; 
    int y; 
} myStruct_st; 

Je comprends que myStruct_s est la structure qui doit être déclarée en avant. J'ai eu cette faute de frappe dans mon code qui semblait compiler. Je me demande comment. Est-ce que quelqu'un sait?Est-ce que quelqu'un sait pourquoi cela compile avec succès?

+0

Ceci est juste un commentaire de côté, mais je place généralement 'typedef's et tel _before_' main() '(quand je ne les inclue pas dans un fichier d'en-tête à la place, c'est). – JAB

Répondre

4

La structure locale a rien à faire avec la structure définie en dehors de main(). Dans vous (forward-) déclarez une structure, définissez un pointeur vers cette structure et ne définissez jamais la structure. C'est parfaitement OK. Il se trouve que vous définissez une structure avec le même nom en dehors de main().

0

Je pense que vous ne comprenez pas comment le typedef fonctionne - ce n'est pas une substitution de macro.

En particulier, en utilisant struct myStruct_s après la typedef est pas la même chose que « struct struct myStruct_s » - il est tout simplement struct myStruct_s, comme il se lit sur le visage. Le typedef introduit un jeton qui peut être utilisé plutôt que struct ..., mais il ne se développe pas comme une macro et il ne "supprime" pas la déclaration struct ..., qui peut toujours être utilisée.

+1

Je comprends cela. Ma question est comment fonctionne struct myStruct_st * mS? Notez que myStruct_st est un typedef pour struct myStruct_s. Je crois qu'Armen a répondu à cela. – Jingo

Questions connexes