我对c ++结构中的关键字用法有疑问。
我见过像这样定义的结构:
typedef struct {
SIGSELECT signo;
U32 id;
U32 re;
U16 id1;
U8 id2;
}First;
请帮助我理解这些关键词:SIGSELECT,U32,U16,U8
答案 0 :(得分:14)
他们“意味着什么”是一个非常深刻的问题,也取决于你所处的环境。
这些是类型名称,但不是标准的C ++类型,因此它们并不是普遍已知的。
猜测是Uxx
类型是指定位宽的“无符号整数”。所以U32
将是一个32位无符号整数,在C99中称为uint32_t
,但尚未在C ++中标准化。
SIGSELECT
有点困难,但该成员名为“signo
”,这意味着这是一个信号编号。如果代码适用于类似POSIX的环境,SIGSELECT
很可能只是默认整数类型int
的别名。例如,请参阅this page。
某些标题可以
#define SIGSELECT int
或
typedef int SIGSELECT;
为了引入这个新名称(并且类似于提到的其他类型)。
要确定这些是预处理程序符号还是实际的typedef
:ed类型别名,请通过预处理程序运行代码并读取其输出。如果措辞发生变化(即SIGSELECT
变为int
或其他类型),则它们是预处理器符号,否则它们是typedef
:s。
答案 1 :(得分:0)
#include <cstdint>
this excellent article by Alex Allain更详细地描述了库和这些数据类型。