找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1054|回复: 10
收起左侧

关于C语言自加++代码的疑惑

[复制链接]
ID:997026 发表于 2022-3-25 14:21 | 显示全部楼层 |阅读模式
如下的程序,只要state_flag=1为真,state_cnt就从0开始自加. 想知道如果此时state为真,state_cnt=5,此时是state_cnt一直就等于5了,停止自加了,还是state_cnt当前的值被赋为5,然后从5为初值继续开始自加??

unsigned int  state_cnt=0;
unsigned char  state_flag=1;
unsigned char  state=0;

int main(void)
{
state_flag=1;
while(1)
{
  ;
}


ISR_(timer_vect)  //定时器中断,1s进一次中断
{
   if (state_flag==1)
   {
      state_cnt ++;
      if(state)
       {
         state_cnt=5;
       }
   }
}
回复

使用道具 举报

ID:883242 发表于 2022-3-25 14:59 | 显示全部楼层
代码不全,无法判别。
回复

使用道具 举报

ID:584814 发表于 2022-3-25 15:03 | 显示全部楼层
楼主想多了。
上面的程序是编译不过去的
回复

使用道具 举报

ID:879348 发表于 2022-3-25 15:41 | 显示全部楼层
这不很简单吗,在5和6不停变
回复

使用道具 举报

ID:997026 发表于 2022-3-25 15:51 | 显示全部楼层
man1234567 发表于 2022-3-25 15:03
楼主想多了。
上面的程序是编译不过去的

上面的 程序只是个框架,别纠结是否能否编译,没必要把所有给出来,我的重点在于是否自加,是在讨论逻辑问题
回复

使用道具 举报

ID:997026 发表于 2022-3-25 15:52 | 显示全部楼层
wufa1986 发表于 2022-3-25 15:41
这不很简单吗,在5和6不停变

哪里来的6呢
回复

使用道具 举报

ID:401564 发表于 2022-3-25 21:12 | 显示全部楼层
对于i++和++i,网上书本上都有说明的
但我个人并不会太过于纠结这个,如果我实在不理解,那我就用i=i+1;这就可以了,我完全可以做到整个程序不会有++运算
像你这个,如果是我,我肯定不会发帖子问,如果要知道哪个变量的值等于多少,我会直接输出到串口,后面加上一条while(1);
直接通过结果来验证自己的推测
回复

使用道具 举报

ID:896483 发表于 2022-3-25 22:11 | 显示全部楼层
第一次是从0开始自加,执行到if(state)为真时,重新赋值为5,到下次在执行时,就是从5开始自加,再次执行到if(state)为真时,又会重新赋值为5
回复

使用道具 举报

ID:879348 发表于 2022-3-26 08:15 | 显示全部楼层

等于5以后,下次再入中断有一个机器周期时间是6,然后又等于5
回复

使用道具 举报

ID:123289 发表于 2022-3-26 15:29 | 显示全部楼层
程序是一步步执行的!!!
你一步步的走走,答案就有了。
纠结什么叫呢?
回复

使用道具 举报

ID:584814 发表于 2022-3-27 22:17 | 显示全部楼层
hxdby 发表于 2022-3-25 15:51
上面的 程序只是个框架,别纠结是否能否编译,没必要把所有给出来,我的重点在于是否自加,是在讨论逻辑 ...

如果主程序不少括号,且定时器可以正常工作的话,按你的程序执行那个值永远是不变的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表