我用像這樣的代碼:C中的函數標準中是否有`typedef`和`struct`?
void A()
{
typedef struct B B;
struct B
{
};
B b;
};
typedef
和struct
定義一個函數內。它與Clang一起編譯,但我想知道(1)它們是否是標準的一部分。關於(2)它們是否僅限於功能範圍內的識別。
我用像這樣的代碼:C中的函數標準中是否有`typedef`和`struct`?
void A()
{
typedef struct B B;
struct B
{
};
B b;
};
typedef
和struct
定義一個函數內。它與Clang一起編譯,但我想知道(1)它們是否是標準的一部分。關於(2)它們是否僅限於功能範圍內的識別。
是的,標準允許這樣做,是的,這樣創建的名稱只在函數內部可見(即它具有局部範圍,就像當您定義int i;
,i
具有局部範圍時一樣)。
這是比較常見的,但是做這樣的事情:
typedef struct {
/* ... */
} B;
B b;
是的,它是允許的。 但函數中不能有
函數。
聲明應該先完成,後面你可以用你的實際代碼完成。
你做一些操作自己的函數中像下面
void A()
{
int a=0;
a++;
typedef struct B B;//this is wrong
struct B
{
};
B b;
};
C89要求聲明/定義先於其他語句,但C99不要。 – 2011-04-08 05:37:29
後或不能聲明,如果你真的只打算使用一次,'結構{/ * ... * /} B; ':) – Mac 2011-04-08 05:27:29