以下两个行表达式之间有什么区别:
#define value (unsigned char) 0x1f
#define value 0x1fu
我通常在单个.c文件中的示例中找到这两个表达式。关于编译器行为,它们之间有什么区别吗?
答案 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'
)