今日刷题之char的大小问题和宏定义注意事项

8 篇文章 0 订阅
7 篇文章 0 订阅

目录

1.找错误

2.以下是求一个数的平方的程序,请找出错误

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.  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在凌晨等太阳¤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值