[英]Why does this c struct work?
我在Windows驅動程序工具包(WDK)示例中看到了流c語言代碼:
typedef struct _COMMON_DEVICE_DATA
{
PDEVICE_OBJECT Self;
BOOLEAN IsFDO;
......................
} COMMON_DEVICE_DATA, *PCOMMON_DEVICE_DATA;
typedef struct _PDO_DEVICE_DATA
{
COMMON_DEVICE_DATA;
PDEVICE_OBJECT ParentFdo;
.................
} PDO_DEVICE_DATA, *PPDO_DEVICE_DATA;
但是,當我想測試smillar代碼時,它會生成錯誤。
test.c:14:6: error: ‘AA’ has no member named ‘flag’
a.flag = 1;
整理代碼如下:
typedef struct __COMMON_DATA{
int flag;
}COMMON_DATA;
typedef struct __AA{
COMMON_DATA;
int x;
int y;
}AA;
int main(int argc, char *argv[])
{
AA a;
a.flag = 1;
return 0;
}
一切似乎都與窗口示例代碼相同,但是哪里出錯了?
WDK代碼示例中使用的語法是Microsoft在C中繼承結構的擴展。但是您的錯誤消息看起來像是gcc錯誤消息。
如果您實際使用的是gcc,則可以嘗試使用-fms-extensions
構建。
沒有成員命名標志,因為AA沒有成員命名標志
typedef struct __AA{
COMMON_DATA aa_flag;
int x;
int y;
}AA;
您應該在COMMON_DATA結構而不是AA結構中訪問實際標志
a.aa_flag.flag = 1;
如果使用-Wall -Wextra -pedantic
編譯,則可以在出現錯誤之前看到以下警告:
./struct.c:6:16: warning: declaration does not declare anything
COMMON_DATA;
可以用代碼的變量附加名稱來固定。 這工作正常:
typedef struct __COMMON_DATA{
int flag;
}COMMON_DATA;
typedef struct __AA{
COMMON_DATA cd;
int x;
int y;
}AA;
int main(int argc, char *argv[])
{
AA a;
a.cd.flag = 1;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.