2011-04-08 63 views
16

我用像這樣的代碼:C中的函數標準中是否有`typedef`和`struct`?

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

    }; 

    B b; 
}; 

typedefstruct定義一個函數內。它與Clang一起編譯,但我想知道(1)它們是否是標準的一部分。關於(2)它們是否僅限於功能範圍內的識別。

回答

23

是的,標準允許這樣做,是的,這樣創建的名稱只在函數內部可見(即它具有局部範圍,就像當您定義int i;,i具有局部範圍時一樣)。

這是比較常見的,但是做這樣的事情:

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

後或不能聲明,如果你真的只打算使用一次,'結構{/ * ... * /} B; ':) – Mac 2011-04-08 05:27:29

2

是的,它是允許的。 但函數中不能有
函數。

聲明應該先完成,後面你可以用你的實際代碼完成。

你做一些操作自己的函數中像下面

void A() 
{ 

int a=0; 

a++;  

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

    }; 

    B b; 
}; 
+4

C89要求聲明/定義先於其他語句,但C99不要。 – 2011-04-08 05:37:29

相關問題