【发布时间】:2011-11-30 08:27:02
【问题描述】:
请看我的代码:
#include <stdint.h>
int main(int argc, char *argv[])
{
unsigned char s = 0xffU;
char ch = 0xff;
int val = 78;
((int8_t) + (78)); /*what does this mean*/
INT8_C(val); /*equivalent to above*/
signed char + 78; /*not allowed*/
return 0;
}
我发现<stdint.h>中的宏定义是:
#define INT8_C(val) ((int8_t) + (val))
这个加号的意义或意义是什么?
【问题讨论】:
-
应该注意
INT8_C的这个定义是错误的:7.18.4第3段:“每次调用这些宏之一(注意:指INTN_C)都应该扩展为一个整数常量表达式适合在#if预处理指令中使用。” 该转换在预处理器指令中不起作用,因为在预处理期间不存在类型(以及因此转换)。您使用的是什么编译器/平台?您应该考虑提交有关此问题的错误报告。 -
@ChrisLutz:在 C99 中有效;它在纳入 N1256 的技术勘误 1 中无效。这是对DR #209的回应。
-
@KeithThompson - 啊。我有 TC2 的副本,直到最近才真正了解技术勘误。