簡體   English   中英

為什么這個結構起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM