OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7457|回复: 13

C语言不同文件之间的全局变量定义问题

[复制链接]

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2021-8-13 14:22:22 | 显示全部楼层 |阅读模式
50金钱
在工程中有两个文件,A.c , B.c ,这两个文件中都定义了int test=0;的全局变量,当执行编译的时候为什么会报重复定义的错误。
我的理解是int test=0;这个变量的作用域是当前文件,不同文件直接应该是不会影响才对啊,有没有对这方面比较了解的。

最佳答案

查看完整内容[请看2#楼]

在C语言中, 全局变量加static是使变量只作用于当前文件, 别的C文件内的函数是无法对它进行读写。 所以它容许不同C文件可以使用同名的static全局变量。 比如 A.c 中定义了static int count; 然后B.c 也定义了static int count;, 它们俩都是count, 但就是两个独文的全局变量, A.c内的函数只能对A.c 定义的static int count读写, 不能对B.c 里的static int count读写。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4105
金钱
4105
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-8-13 14:22:23 | 显示全部楼层
在C语言中, 全局变量加static是使变量只作用于当前文件, 别的C文件内的函数是无法对它进行读写。 所以它容许不同C文件可以使用同名的static全局变量。
比如  A.c 中定义了static int count;  然后B.c 也定义了static int count;, 它们俩都是count, 但就是两个独文的全局变量, A.c内的函数只能对A.c 定义的static int count读写, 不能对B.c 里的static int count读写。
回复

使用道具 举报

13

主题

250

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2248
金钱
2248
注册时间
2019-8-7
在线时间
364 小时
发表于 2021-8-13 14:24:43 | 显示全部楼层
static 加上这个才是作用于当前文件
回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2021-8-13 14:45:59 | 显示全部楼层
前面加extern
回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2021-8-13 14:46:33 | 显示全部楼层
回复

使用道具 举报

11

主题

2131

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4731
金钱
4731
注册时间
2015-1-10
在线时间
591 小时
发表于 2021-8-13 16:05:43 | 显示全部楼层
你需要重新看看C语言了
回复

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
 楼主| 发表于 2021-8-13 16:44:09 | 显示全部楼层
远命 发表于 2021-8-13 14:24
static 加上这个才是作用于当前文件

不加static定义的变量代表什么呢,我的理解不加的话我只要在函数外定义那么它的作用域就是当前文件下的所有函数都可以使用。
回复

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
 楼主| 发表于 2021-8-13 16:45:35 | 显示全部楼层

我不是要两个文件中使用同一个变量,而是想搞清楚两个不同的文件中定义了相同的变量会报错的原因。
回复

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
 楼主| 发表于 2021-8-13 16:46:26 | 显示全部楼层
阿侑kevin 发表于 2021-8-13 16:05
你需要重新看看C语言了

确实是需要巩固,但是查阅了资料并没有找到我想要的,故而求助广大网友!!!
回复

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
 楼主| 发表于 2021-8-13 16:51:07 | 显示全部楼层
zzk111 发表于 2021-8-13 14:46
可以看看这个http://c.biancheng.net/view/404.html

看了下内容重点还是说到了extern这个关键字,但是我想搞明白的是两个不同文件,我定义相同的变量名为什么会冲突。
回复

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
 楼主| 发表于 2021-8-13 17:03:53 | 显示全部楼层

以上两个工程体现的作用是不一样的,但是为什么是不一样的这个逻辑我无法理清,懂行的能给解释下不。。
回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2021-8-13 18:27:03 | 显示全部楼层
坐看风 发表于 2021-8-13 16:51
看了下内容重点还是说到了extern这个关键字,但是我想搞明白的是两个不同文件,我定义相同的变量名为什么 ...

如果两个文件存在同一个工程中,由于相同的全局变量名所以会重复定义
回复

使用道具 举报

56

主题

343

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-3-8
在线时间
267 小时
发表于 2021-8-14 22:19:40 | 显示全部楼层
坐看风 发表于 2021-8-13 16:44
不加static定义的变量代表什么呢,我的理解不加的话我只要在函数外定义那么它的作用域就是当前文件下的所 ...

不加Static的是全局。全工程有效。
回复

使用道具 举报

13

主题

250

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2248
金钱
2248
注册时间
2019-8-7
在线时间
364 小时
发表于 2021-8-16 09:19:00 | 显示全部楼层
坐看风 发表于 2021-8-13 16:45
我不是要两个文件中使用同一个变量,而是想搞清楚两个不同的文件中定义了相同的变量会报错的原因。

如果想用相同 那你得用static 限制作用域
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 05:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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