C/C++ 的 Qt Creator 警告枚举的填充
Qt Creator with C/C++ warns about padding for enums
所以我有一个完全由以下组成的数据结构:
unsigned char
即字节大小的属性
bool_T
我有 typedef
d 到 unsigned char
(如果是 C)或 bool
(如果是 C++)所以又是字节大小的
- 包含不超过 5 个条目的枚举,因此也应该是字节大小的。
然而,在每个 enum
旁边,Qt Creator 会放置一个关于用一些数据结构填充数据结构的预分析假设警告(符号是一个空的黄色三角形 - 只有它的轮廓)字节的目的,我收集,对齐结构中的下一个元素。
这有什么意义,因为这是(或应该是)所有字节?我的 enum
不是字节吗?我可以强制编译器使它们成为字节吗?我可以强制编译器在某些情况下不对齐,还是 C 标准禁止这样做?
更多信息:我正在编写 C89,使用 Qt 5.12.11、Qt Creator 4.15.0(基于 Qt 5.15.2)、带有 Ninja 1.10.2 的 CMake 3.19.4 并使用 minGW/gcc 进行编译7.3.0.
谢谢!
C++ 如今可以指定 enum
的 底层类型 ,但这是很新的(C++11,不是 C99,更不用说 C89)。所以不,你不能假设它是一个字节,也不能直接强制它。但是你可以使用位域(:3
最多可以有 8 个值)
此外,C++ 中的 bool
不是 byte-sized 的定义;它可以更大。
所以我有一个完全由以下组成的数据结构:
unsigned char
即字节大小的属性bool_T
我有typedef
d 到unsigned char
(如果是 C)或bool
(如果是 C++)所以又是字节大小的- 包含不超过 5 个条目的枚举,因此也应该是字节大小的。
然而,在每个 enum
旁边,Qt Creator 会放置一个关于用一些数据结构填充数据结构的预分析假设警告(符号是一个空的黄色三角形 - 只有它的轮廓)字节的目的,我收集,对齐结构中的下一个元素。
这有什么意义,因为这是(或应该是)所有字节?我的 enum
不是字节吗?我可以强制编译器使它们成为字节吗?我可以强制编译器在某些情况下不对齐,还是 C 标准禁止这样做?
更多信息:我正在编写 C89,使用 Qt 5.12.11、Qt Creator 4.15.0(基于 Qt 5.15.2)、带有 Ninja 1.10.2 的 CMake 3.19.4 并使用 minGW/gcc 进行编译7.3.0.
谢谢!
C++ 如今可以指定 enum
的 底层类型 ,但这是很新的(C++11,不是 C99,更不用说 C89)。所以不,你不能假设它是一个字节,也不能直接强制它。但是你可以使用位域(:3
最多可以有 8 个值)
此外,C++ 中的 bool
不是 byte-sized 的定义;它可以更大。