在c ++代码中,以下关键字是什么意思? SIGSELECT,U32,U16,U8

时间:2011-06-20 13:37:44

标签: c++ struct typedef

我对c ++结构中的关键字用法有疑问。

我见过像这样定义的结构:

typedef struct {
    SIGSELECT signo;
    U32 id;
    U32 re;
    U16 id1;
    U8 id2;
}First;

请帮助我理解这些关键词:SIGSELECT,U32,U16,U8

2 个答案:

答案 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)

正如@ AJG85在该线程的注释中提到的那样,您可以通过包含标准库CSTDINT来移植数据类型

#include <cstdint>

this excellent article by Alex Allain更详细地描述了库和这些数据类型。