时
unsigned int a;
与
相同int unsigned a;
即我想知道的,在以下代码中:
typedef int unsigned my_uint32;
'unsigned'“引用”my_uint32或int?它和
一样typedef unsigned int my_uint32;
答案 0 :(得分:3)
要恢复,语法为:
typedef keywords alias;
因此typedef unsigned int my_uint32
与typedef int unsigned my_uint32;
相同。
定义自己的类型时可能会小心。在你的情况下,你想要一个4字节类型,你应该使用在stdint.h(uint32_t)中定义的类型,如果你在C中编码,或者在cstdint中,如果你用C ++编码,因为'int'是“至少4个字节”而不是在每种情况下“4个字节”。
答案 1 :(得分:1)
首先,您无法创建标记为unsigned
/ signed
的自己的类型,因此仅可以应用于预先存在的类型。
其次,是的,交换该限定符的位置是有效的:
[C++11: 7.1.6.2/3]:
当允许多个简单类型说明符时,它们可以按任何顺序与其他 decl-specifiers 自由混合。 [..]
因此,两个声明是等效的。
答案 2 :(得分:1)
C ++声明(在最简单的情况下)由两部分组成:
声明说明符和声明符。一切都达到了
无论是宣布什么或第一个“运营商”(例如*
或&
)是声明说明符的一部分,其中包含顺序
无所谓。所以你可以自由地写下这样的东西:
int const unsigned static i;
(如果您不关心您的同事对您的代码的看法)。
C已弃用存储类说明符static
,
extern
等等,但在第一个位置,这是
自C早期以来普遍接受的公约
其余的:
我一直看到修饰符在基本类型之前(例如
unsigned int
), 出现基本类型时。大部分的
我工作过的地方只使用unsigned
,而不是。{
unsigned int
。
我也经常看到signed
/ unsigned
在任何前面
长度修饰符:unsigned long
,而不是long unsigned
。
const
或volatile
的位置往往会有所不同。大多数
我知道的更有经验的程序员把它放在最后
声明说明符,但这是一个有点近期
发展,很多人继续使用旧的
约定,并在存储类之后立即放置它
说明符。
对于除存储类说明符之外的所有内容,这是公平的 随心所欲;关于我所说的唯一其他规则是普遍的 没有拆分实际的类型信息,就像我在我的 示例
答案 3 :(得分:0)
声明是等效的。