PIC单片机 mplab

在MPLAB IDE中, 程序编好后,第一次编译有警告,在没修改的情况下再编译一次,警告消失了,求解? warning是
arithmetic overflow in constant expression。

应该是第一次编译时,你没有加标识,而第二次编译时,ide自动识别了,小问题
a = 3453463463L; //表示一个long类型
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-03-31
(751) arithmetic overflow in constant expression
(代码生成器)
代码生成器对某个常量表达式进行求值,产生的值对于表达式类型来说太大。触发该警
告最常见的代码是对有符号数据类型进行赋值。例如:
signed char c;
c = 0xFF;
作为一个有符号的 8 位量,c 只能赋值为 -128 至 127。常量等于 255,超出了该范围。
如果您的本意是将该变量中的所有位置 1,则使用以下形式之一:
c = ~0x0;
c = -1;
它会将变量中的所有位置 1,无论变量的长度如何,并且不会发出警告。
该警告也可能由于中间值溢出而触发。例如:
unsigned int i; /* assume ints are 16 bits wide */
i = 240 * 137; /* this should be okay, right? */
使用计算器快速检查发现 240 * 137 等于 32880,它可以轻松地存储在一个 unsigned
int 中,但会产生警告。这是什么原因?因为 240 和 137 均为 signed int 值。因此,
相乘的结果也必须为 signed int 值,但 signed int 无法容纳值 32880。(两个操
作数均为常量值,因此代码生成器可以在编译时对该表达式求值,但它必须遵循所有
ANSI C 规则来执行该操作。)以下代码会强制乘法运算产生无符号结果:
i = 240u * 137; /* force at least one operand
to be unsigned */