[英]Typedef inside a C struct
首先關閉令我難以置信的代碼:
typedef struct Object {
typedef int MyInt;
void (*destructor)(Object *);
void *(*constructor)(struct Object *);
} Object;
為什么編譯器阻止我在struct中定義typedef?
這是不允許的。 在C ++類中允許類似的東西,但在標准C中不允許。
在C語言中, struct
每個聲明都必須聲明一個數據字段(可能是未命名的)。 這意味着可以在C中定義struct
內部的類型,只要新類型聲明作為數據字段聲明的一部分嵌入即可。 例如
struct Outer {
struct Inner {
int i;
} field;
};
struct Outer a;
a.field.i = 42;
在上面的示例中,類型struct Inner
在struct Outer
類型中聲明。 但是,“嵌套” struct Inner
類型聲明在struct Outer
沒有任何本地化。 它仍然具有文件范圍,因為C語言沒有struct
范圍這樣的東西。 這意味着您仍然可以使用struct Inner
作為同一文件范圍的成員
struct Inner b;
b.i = 42;
同時,這個技巧不適用於typedef
聲明,因為typedef
聲明不聲明數據字段。
請注意,本着C語言的精神,即使你的typedef
聲明在某種程度上是合法的,它仍然會聲明一個帶有文件范圍的typedef名稱MojInt
。 即它的行為與在struct
之前放置typedef
聲明的行為完全相同。
不知道它是在C ++中被允許的,但我可以肯定地說我沒有看到沒有vanilla C編譯器接受該構造。
這是一個可瀏覽的C99語法,可能有望清除混淆: http : //slps.github.io/zoo/c/iso-9899-tc3.html
檢查1998 C ++語法進行比較: http : //slps.github.io/zoo/cpp/iso-14882-1998.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.