硬汉嵌入式论坛

 找回密码
 立即注册
查看: 402|回复: 7
收起左侧

犯了个低级错误,数值i会不会自增

[复制链接]

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121986
QQ
发表于 2026-3-28 10:25:28 | 显示全部楼层 |阅读模式



[C] 纯文本查看 复制代码
int main(void) 
{
    int i = 0;  // 外层的 i
    
    while(1) 
    {
        volatile int i = 0;  // 内层的 i,遮蔽了外层变量
        printf("内层 i = %d, 外层 i = %d\r\n", i++, i);
        // 打印: 内层 i = 0, 外层 i = 0
        // 下次循环内层 i 又变回 0
    }
}

回复

使用道具 举报

7

主题

418

回帖

439

积分

高级会员

积分
439
发表于 2026-3-28 11:15:37 | 显示全部楼层
不能忽略编译器的警告,有时候警告得看一下,这个情况正常编译器会有警告的。
回复

使用道具 举报

4

主题

465

回帖

477

积分

高级会员

积分
477
发表于 2026-3-28 11:18:23 | 显示全部楼层
2026-03-28_111649.jpg
回复

使用道具 举报

2

主题

83

回帖

89

积分

初级会员

积分
89
发表于 2026-3-31 09:47:13 | 显示全部楼层
哈哈哈这个应该会有警告提示的
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121986
QQ
 楼主| 发表于 2026-3-31 10:14:43 | 显示全部楼层
小梁呐 发表于 2026-3-31 09:47
哈哈哈这个应该会有警告提示的

用的SES 5.X版本,确实什么也没提示
回复

使用道具 举报

361

主题

2214

回帖

3302

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3302
发表于 2026-3-31 10:32:02 | 显示全部楼层
内层i出现后,外层的i就没有作用了。 i++和i都是内层的i。 同名的变量尽量别用,自己懵,别人更懵,只有编译器在偷笑。
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121986
QQ
 楼主| 发表于 2026-3-31 11:30:29 | 显示全部楼层
caicaptain2 发表于 2026-3-31 10:32
内层i出现后,外层的i就没有作用了。 i++和i都是内层的i。 同名的变量尽量别用,自己懵,别人更懵,只有编 ...

我这个是代码太长了,防不胜防。
回复

使用道具 举报

7

主题

50

回帖

71

积分

初级会员

积分
71
发表于 2026-3-31 15:04:26 | 显示全部楼层
以前在函数开始的时候定义变量,就没有出现过这个情况。自从可以随时随地定义变量以后,我也时不时的犯一下这个错误,还不容易发现
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-4-10 19:23 , Processed in 1.667714 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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