(无符号演员)值与写作值之间的差异?

时间:2015-10-22 08:32:12

标签: c types casting

以下两个行表达式之间有什么区别:

#define value (unsigned char) 0x1f 
#define value 0x1fu

我通常在单个.c文件中的示例中找到这两个表达式。关于编译器行为,它们之间有什么区别吗?

2 个答案:

答案 0 :(得分:3)

假设我们修复了破碎的宏以使用标识符,

之间的区别
#define FOO (unsigned char)0x1f

#define FOO 0x1fu

是他们的类型。第一个定义的类型是unsigned char,第二个定义的类型是unsigned int。当您计算每个sizeof运算符的结果时,您可以看到这一点:

printf ("%zu\n", sizeof(FOO));

可能输出不同的值。

答案 1 :(得分:1)

这些都不起作用,因为这些都不起作用,因此不同。现在,如果你的意思是:

#define var 0x1f

意味着短语var的字面使用将从现在开始等于0x1f

#define var (unsigned char) 0x1f

意味着短语var的字面使用将从现在开始等于(unsigned char) 0x1f

默认情况下,第一个var为0x1f的假设为int形式。表示整数文字(相当于31)。第二个是对unsigned char的整数文字转换(在int值中仍相当于31,但现在更像是'\31'