[英]clang compaining about __attribute__((packed)) even though the struct needs to be packed
我有一个结构,需要打包(没有打包大小是20字节,但我需要16才能读/写)。 当我添加了packed属性时,我得到了error: packed attribute is unnecessary for
struct的所有成员的警告, error: packed attribute is unnecessary for
的。 当用pragma沉默错误时,代码编译得很好,结构的大小是16,但是如果我删除了pragma就失败了(因为我正在使用-Werror
)。 clang是不是错误地发出了这个警告,还是我做错了什么?
#include <cstdint>
typedef struct __attribute__((packed))
{
uint16_t wFormatTag;
uint16_t nChannels;
uint32_t nSamplesPerSec;
uint32_t nAvgBytesPerSec;
uint16_t nBlockAlign;
}
WAVEFORMAT;
int main()
{
WAVEFORMAT w;
(void)w;
}
我正在使用Xcode9工具链:
clang -v
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin16.7.0
使用-Weverything
编译时会生成警告:
clang++ -Weverything pack.cpp
pack.cpp:8:10: warning: packed attribute is unnecessary for 'wFormatTag' [-Wpacked]
WORD wFormatTag;
^
...
事实上,clang似乎错误地发出了警告。 这已在最近的clang版本中修复。
特别是,警告不会与clang 6.0候选clang version 6.0.0-svn323772-1~exp1
( clang version 6.0.0-svn323772-1~exp1
)一起clang version 6.0.0-svn323772-1~exp1
。 我能够使用以前的clang版本复制警告,包括5.0.1,4.0.0和3.8.0。
我相信这是修正问题的铿锵提交:
https://reviews.llvm.org/D34114
不幸的是,它可能需要一些时间,直到Xcode的铿锵看到这个修复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.