目录
1.找错误
#define Max_CB 500
void LmiQueryCSmd(Struct MSgCB * pmsg)
{
unsigned char ucCmdNum;
......
for(ucCmdNum=0;cCmdNum<Max_CB;ucCmdNum++)
{
......;
}
ucCmdNum 是char型,最大的值127,所以不可能到500,所以是死循环。
运行结果:
char类型的最大值:127 char类型的最小值:-128 signed char类型的最大值:127 signed char类型的最小值:-128 unsigned char类型的最大值:255
short类型的最大值:32767 short类型的最小值:-32768 unsigned short类型的最大值:65535
int类型的最大值:2147483647 int类型的最小值:-2147483648 unsigned int类型的最大值:4294967295
long类型的最大值:2147483647 long类型的最小值:-2147483648 unsigned long类型的最小值:4294967295
2.以下是求一个数的平方的程序,请找出错误:
#define SQUARE(a)((a)*(a))
int main()
{
int a=5;
int b;
b=SQUARE(a++);
}
尽量不要在define里面写自增,因为不知道它何时会自增。
经过预处理器处理后,代码变成了 int b = (a++)(a++);也就是下面那个代码的形式, 而C标准并未规定编译器在一个表达式中何时进行自增运算,故结果可能是5乘5(先把a取出,最后进行两次自增),也可能是**(56)**(先取出第一个a,自增后取出第二个a),输出25说明你的编译器采用了前面那种方式罢了。
所以建议不要在同一个表达式中对同一变量施行多次自增运算
运行结果:
总结:应该是区分编译器的,这里用的是visual Studio 2019.