【问题标题】:gcc warns about "unnamed struct/union that defines no instances", but the struct does have a namegcc 警告“未定义实例的未命名结构/联合”,但该结构确实有名称
【发布时间】:2016-03-24 01:13:07
【问题描述】:

我有以下结构

typedef struct VMCS
{
    uint32_t revision;
    uint32_t abortValue;
} __attribute__ ((packed)) VMCS;

当我尝试编译我的代码时,我从 gcc 收到此警告

warning: unnamed struct/union that defines no instances

接着是由于 VMCS 未定义而导致的一堆错误。前面的代码非常无害,包括 stdint.h 和一些 #define 条目。这些似乎不会导致会干扰结构的错误。

【问题讨论】:

  • VMCS 是否被定义为空宏?听起来确实如此。
  • C 中为数不多的普遍接受的命名约定之一是仅对宏和 enum-constants 使用全大写名称。更改名称并重试。或者,您可以验证预处理器输出。

标签: c gcc struct gcc-warning


【解决方案1】:

... 和一些#define 条目

显然您将VMCS 定义为一个带有空替换列表的宏。编译器将您的代码视为

typedef struct
{
    uint32_t revision;
    uint32_t abortValue;
} __attribute__ ((packed));

因此发出警告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 2018-09-13
    相关资源
    最近更新 更多