与表达式一样,有些整型常量的类型规则已更改。在 K&R C 中,无后缀二进制常量仅在其值足以表示 int 时才具有类型 int。无后缀八进制或十六进制常量仅在其值足以表示 unsigned int 时才具有类型 int。否则,整型常量的类型为 long。有时,值用结果类型不足以表示。在 1990 ISO/IEC C 标准中,常量类型是以下列表中与值对应的第一个类型:
无后缀十进制:int、long、unsigned long
无后缀八进制或十六进制:int、unsigned int、long、unsigned long
U 后缀:unsigned int、unsigned long
L 后缀:long、unsigned long
UL 后缀:unsigned long
当您使用 -xtransition 选项时,对于其行为可能会根据所涉及常量的类型处理规则而更改的任何表达式,ISO C 编译器会向您发出警告。旧整形常量类型处理规则仅在转换模式下使用。ISO 和符合模式使用新规则。