2016-03-24 3 views
0

Я имею следующую структуруНКУ предупреждают о «неназванных структурах/объединении, который не определяет экземпляров», но структура имеет имя

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

, когда я пытаюсь скомпилировать мой код я получаю это предупреждение от ССЗА

warning: unnamed struct/union that defines no instances 

, за которым следует куча ошибок, вызванных неопределенностью VMCS. Код, предшествующий этому, очень безобидный, состоящий из включения stdint.h и ряда записей #define. Кажется, что это не может привести к ошибкам, которые могут повлиять на структуру.

+2

Действительно ли 'VMCS' определяется как пустой макрос? Это определенно звучит так, как есть. – AnT

+0

Одним из немногих общепринятых соглашений об именах в C является использование имен всех прописных букв только для макросов и _enum-constants_. Измените имена и повторите попытку. В качестве альтернативы вы можете проверить вывод препроцессора. – Olaf

ответ

2

... и ряд #define записей

Видимо вы определили VMCS как макрос с пустым списком замены. Ваш код представлен компилятором как

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

Следовательно, предупреждение.