此十进制常量仅在ISO C90中无符号

时间:2014-09-04 16:11:14

标签: c

stackoverflowers:> (我可以这么说吗?:|) 好的......这次我想知道这个警告是否应该被解决,或者应该被忽略。 它代表了在下一级推进所需的经验数量。 (对于一场比赛) 这是错误:warning: this decimal constant is unsigned only in ISO C90 这是文件:(我将只显示代码的一部分,它很长:D。)

const DWORD exp_table_common[PLAYER_EXP_TABLE_MAX + 1] =
{

2150000000, //  100
2210000000,     
2250000000,     
2280000000,     
2310000000,     
2330000000, //  105
2350000000,     
2370000000,     
2390000000,     
2400000000,     
2410000000, //  110
2420000000,     
2430000000,     
2440000000,     
2450000000,     
2460000000, //  115
2470000000,     
2480000000,     
2490000000,     
2490000000,     
2500000000, //  120
};

这只是警告的行。

1 个答案:

答案 0 :(得分:3)

在C90中,十进制常量得到它首先适合的类型

int, long, unsigned long

在C99之后,十进制常量得到它首先适合的类型

int, long, long long

在您的系统中,2150000000大于LONG_MAX(当然是2147483647)。所以使用C90编译器,它是unsigned long。对于当前的编译器,它是long long

你应该忽略吗?这取决于后续代码。建议不要忽略并通过附加u后缀2500000000u来明确地将十进制常量声明为无符号常量。