gcc: исправление -педантичного предупреждения "безымянная структура"
Я пытаюсь получить некоторый код из другого места (в частности, здесь), чтобы скомпилировать без каких-либо предупреждений, когда gcc получает -pedantic
флаг. Единственная проблема - это немного кода:
struct __attribute__ ((aligned(NLMSG_ALIGNTO))) {
struct nlmsghdr nl_hdr;
/* Unnamed struct start. */
struct __attribute__ ((__packed__)) {
struct cn_msg cn_msg;
struct proc_event proc_ev;
};
/* Unnamed struct end. */
} nlcn_msg;
Независимо от того, где я пытаюсь ввести имя для структуры, это приводит к ошибке компиляции. Есть ли способ изменить данный код, чтобы удовлетворить -pedantic
? Или есть какой-то способ сказать gcc не выдавать предупреждение только для этого куска кода?
1 ответ
Решение
Какой стандарт вы компилируете?
Учитывая этот код:
#define NLMSG_ALIGNTO 4
struct nlmsghdr { int x; };
struct cn_msg { int x; };
struct proc_event { int x; };
struct __attribute__ ((aligned(NLMSG_ALIGNTO))) {
struct nlmsghdr nl_hdr;
/* Unnamed struct start. */
struct __attribute__ ((__packed__)) {
struct cn_msg cn_msg;
struct proc_event proc_ev;
};
/* Unnamed struct end. */
} nlcn_msg;
Компиляция с режимом C99, я получаю ошибки:
$ gcc -O3 -g -std=c99 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes \
-Wold-style-definition -Werror -pedantic -c x2.c
x2.c:13:6: error: ISO C99 doesn’t support unnamed structs/unions [-Werror=pedantic]
};
^
cc1: all warnings being treated as errors
$
Компилируя с режимом C11, я не получаю ошибок:
$ gcc -O3 -g -std=c11 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes \
-Wold-style-definition -Werror -pedantic -c x2.c
$