硬汉嵌入式论坛

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

[IAR] IAR下,模块间的全局变量命名重复问题

[复制链接]

6

主题

13

回帖

31

积分

新手上路

积分
31
发表于 2021-5-31 11:19:27 | 显示全部楼层 |阅读模式
项目在IAR环境下,各个模块的全局变量命名重复就报错,在keil和模拟器上正常,大家伙又遇到吗?这是什么原因,有解决方案吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2021-5-31 11:39:49 | 显示全部楼层
全局变量不能重复。MDK也不可以,除非是static前缀的静态变量
回复

使用道具 举报

19

主题

371

回帖

428

积分

高级会员

积分
428
发表于 2021-5-31 13:25:00 | 显示全部楼层
这是C语言的规定,跟IDE无关
回复

使用道具 举报

6

主题

13

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2021-5-31 14:48:58 | 显示全部楼层
eric2013 发表于 2021-5-31 11:39
全局变量不能重复。MDK也不可以,除非是static前缀的静态变量

谢谢!学到了
回复

使用道具 举报

6

主题

13

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2021-5-31 14:52:28 | 显示全部楼层
h_007 发表于 2021-5-31 13:25
这是C语言的规定,跟IDE无关

谢谢   
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2021-5-31 15:21:59 | 显示全部楼层
你可以了解一下static这个关键字,在全局变量上面加了它,就可以限制调用的范围。 那么不同c文件的全局变量就可以同名了。
回复

使用道具 举报

19

主题

371

回帖

428

积分

高级会员

积分
428
发表于 2021-5-31 22:55:24 | 显示全部楼层
比较规范的全局变量和静态变量使用方法:
比如有很多个xxx.c源文件
1. 静态变量
在xxx_1.c开头
static int _var;        // 整个xxx_1.c文件内可见,文件内所有函数可以调用,文件外不可见
                           // 叫做静态变量

void foo (void)
{
    _var = 0;
}

void foo_2 (void)
{
    static int _var_2;      // foo_2函数内可见,函数外不可见,即其他函数不能调用_var_2变量
                                 // 也叫做静态变量,但可见范围不一样

    _var_2 = 0;
}
不同的c文件可以使用同名静态变量,不会冲突

2. 全局变量
在xxx_1.h头文件开头声明
extern int var;
在xxx_1.c源文件开头定义
int var;

只要#include "xxx_1.h",就可以使用var全局变量
这种情况,就不允许同名了
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2021-6-1 09:35:00 | 显示全部楼层
h_007 发表于 2021-5-31 22:55
比较规范的全局变量和静态变量使用方法:
比如有很多个xxx.c源文件
1. 静态变量

对,你这个解释很详细。
以前大学学习普通C语言的时候,代码规模很小,static用的很少。 C++流行后,各种变量作用域的重要性就显现出来了。
回复

使用道具 举报

210

主题

1044

回帖

1684

积分

至尊会员

More we do, more we can do.

积分
1684
发表于 2021-6-1 11:39:34 | 显示全部楼层
请教楼主MDK怎么实现的允许全局变量同名?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 11:19 , Processed in 0.314763 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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