OpenEdv-开源电子网

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

关于main函数内部文件调用问题,C语言学的不好 查资料也没有查到

[复制链接]

7

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2018-12-13
在线时间
10 小时
发表于 2019-8-12 21:19:42 | 显示全部楼层 |阅读模式
2金钱
我测试过下面的代码(有些疑惑期待大家的解惑)当main()函数部分如下:
int main(void)
        {
       
               
extern int flag_adc;//2é¼ˉ100¸öμã±ê־λ
        extern float DATA_Vbefore[100];
        extern         float DATA_Ibefore[100];
                float peakV=0;//μçÑ1·åÖμ
                float peakI=0;//μçá÷·åÖμ

timer,c文件部分如下时:
#include "timer.h"
#include"adc.h"
int flag_adc=1;
int ZC;//ÔY′æêy¾Y
int j;
  float DATA_Vbefore[100];
float DATA_Ibefore[100];
void Timerx_Init(u16 arr,u16 psc)
这样DATA_Vbefore和DATA_Ibefore部分不会报错,当我把main函数内的extern float DATA_Vbefore[100]和extern float DATA_Ibefore[100];变成 float DATA_Vbefore[100]; float DATA_Ibefore[100]; 而把timer内的定义变为extern float DATA_Vbefore[100]和extern float DATA_Ibefore[100];为啥就说我DATA_Vbefore和DATA_Ibefore没有定义,难道是main函数内部的变量不能作为全局变量使用吗?


最佳答案

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

你把变量定义在main函数之外,那么这个变量就是全局的,可以通过extern调用
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2016-8-15
在线时间
413 小时
发表于 2019-8-12 21:19:43 | 显示全部楼层
你把变量定义在main函数之外,那么这个变量就是全局的,可以通过extern调用
我的简书:https://www.jianshu.com/u/3e9efbf4a8c2
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-8-13 02:12:47 | 显示全部楼层
不要这么多局部变量。另外,排版要好好改改。
回复

使用道具 举报

7

主题

59

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1159
金钱
1159
注册时间
2018-5-30
在线时间
151 小时
发表于 2019-8-13 06:44:07 | 显示全部楼层
你最后思考是对的,函数内定义的变量就是局部变量,全局变量只能在函数外定义。你把主程序中float DATA_Vbefore[100]; float DATA_Ibefore[100]; 移出函数,放在函数外,在timer中定义extern float DATA_Vbefore[100]和extern float DATA_Ibefore[100];即可。
回复

使用道具 举报

7

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2018-12-13
在线时间
10 小时
 楼主| 发表于 2019-8-13 08:22:03 | 显示全部楼层
正点原子 发表于 2019-8-13 02:12
不要这么多局部变量。另外,排版要好好改改。

好的,谢谢原子哥的宝贵意见,一定改正。那为啥变量调换了位置就会报错啊,还是不太懂可以解释一下吗
回复

使用道具 举报

10

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2016-8-15
在线时间
413 小时
发表于 2019-8-13 09:01:03 | 显示全部楼层
main函数里面定义的变量也是局部变量,是在栈中的。
我的简书:https://www.jianshu.com/u/3e9efbf4a8c2
回复

使用道具 举报

7

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2018-12-13
在线时间
10 小时
 楼主| 发表于 2019-8-13 09:06:19 | 显示全部楼层
流年丶 发表于 2019-8-13 09:01
main函数里面定义的变量也是局部变量,是在栈中的。

可是main函数内的变量其他文件需要使用不可以在其他文件中用extern关键字调用吗
回复

使用道具 举报

7

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2018-12-13
在线时间
10 小时
 楼主| 发表于 2019-8-13 09:39:52 | 显示全部楼层
流年丶 发表于 2019-8-13 09:38
你把变量定义在main函数之外,那么这个变量就是全局的,可以通过extern调用

好的谢谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 23:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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