2011-04-08 10 views
16

que utiliza un código como éste:¿Están `typedef` y` struct` dentro de una función estándar en C?

void A() 
{ 
    typedef struct B B; 
    struct B 
    { 

    }; 

    B b; 
}; 

typedef y struct definición dentro de una función. Se compiló con Clang, pero quiero saber (1) si son parte del estándar o no. Y sobre (2) si están limitados a ser reconocidos solo en el alcance de la función.

Respuesta

23

Sí, el estándar permite esto, y sí, el nombre que crea de esta manera solo es visible dentro de la función (es decir, tiene alcance local, como cuando define int i;, i tiene alcance local).

Es más común, sin embargo, para hacerlo así:

typedef struct { 
    /* ... */ 
} B; 
B b; 
+16

o, si lo que en realidad sólo va a utilizar una vez, 'struct {/ * ... * /} b; ':) – Mac

2

Sí, está permitido. pero no puede tener
función dentro de una función.

las declaraciones se deben hacer primero y más adelante se puede hacer con su código real.

no se puede declarar después de hacer alguna operación dentro de su función, como a continuación

void A() 
{ 

int a=0; 

a++;  

typedef struct B B;//this is wrong 
    struct B 
    { 

    }; 

    B b; 
}; 
+4

C89 requiere que las declaraciones/definiciones precedan a otras declaraciones, pero C99 no. –