我正在尝试从其他地方(特别是here)获取一些代码,以便在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不发出针对该段代码的警告?
答案 0 :(得分: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
$