找回密码
 立即注册
查看: 944|回复: 4

C51 局部变量定义在函数的位置

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:656
  • 最近打卡:2025-12-14 19:22:49

3

主题

121

回帖

1814

积分

金牌会员

积分
1814
发表于 2024-3-3 20:24:58 | 显示全部楼层 |阅读模式
    switch(menl){
          unsigned char a;   
                                case 2:
                                        LCD_write_string(0, 0, "P0: 152 784  50%", 16);
                                        LCD_write_string(0, 1, "P1: 152 784  50%", 16);
                                        a++;
                                        break;
                                case 3:
                                        LCD_write_string(5, 0, "P2=TIME", 7);
                                        LCD_write_string(7, 1, "(YES)", 5);                               
                                        break;
  }
如上的程序片段,变量 unsigned char a放在 switch(menl){大括号下,编译器没有报错,这样可以?有风险?谢谢

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:679
  • 最近打卡:2025-12-15 00:38:27
已绑定手机

15

主题

1359

回帖

4490

积分

论坛元老

积分
4490
发表于 2024-3-3 21:46:15 | 显示全部楼层
记得Keil C51/251默认支持C89规范,如果想变量定义不在函数开头,需要添加C99规范的支持才行
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:679
  • 最近打卡:2025-12-15 00:38:27
已绑定手机

15

主题

1359

回帖

4490

积分

论坛元老

积分
4490
发表于 2024-3-3 21:48:41 | 显示全部楼层
另外,Keil ARM是支持C99的。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:30
  • 最近打卡:2025-11-12 16:20:46

35

主题

1147

回帖

2848

积分

荣誉版主

积分
2848
发表于 2024-3-3 22:44:03 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-4 09:18 编辑

没有风险, 只能大括号内能访问

规则就是定义变量紧跟大括号就可以.  
大括号被解释为复合语句, 复合语句和函数一样, 是可以定义自己的变量的.

比如:
{
    int a=0;
    ....
}

if(1)
{
int a=0;
....
}
这样都是可以的
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:656
  • 最近打卡:2025-12-14 19:22:49

3

主题

121

回帖

1814

积分

金牌会员

积分
1814
发表于 2024-3-4 08:54:19 | 显示全部楼层
tzz1*** 发表于 2024-3-3 22:44
没有风险, 只能大括号内能访问

规则就是定义变量紧跟大括号就可以.  

好的,谢谢!
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-12-15 21:12 , Processed in 0.104970 second(s), 62 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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