叮当叮当当大约__attribute__((包装)),即使结构需要打包
clang compaining about __attribute__((packed)) even though the struct needs to be packed
我有一个结构,需要打包(不打包大小为 20 字节,但我需要 16 个才能读/写(。当我添加 pack 属性时,我收到了结构的所有成员error: packed attribute is unnecessary for
警告。当使用编译指示使错误静音时,代码编译良好,结构的大小为 16,但如果我删除编译指示,它会失败(因为我使用的是 -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 版本复制警告,包括 5.0.1、4.0.0 和 3.8.0。
我相信这是解决问题的 clang 提交:
https://reviews.llvm.org/D34114
不幸的是,Xcode的clang可能需要一些时间才能看到此修复程序。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 奇怪的结构&GCC&clang(void*返回类型)
- 在 c++ 中拥有一组结构的正确方法是什么?
- 叮当叮当当大约__attribute__((包装)),即使结构需要打包
- 自定义分配器上的额外移动结构用于叮当声