zhp 发表于 2023-4-21 22:08:02

Keil小技巧-在多文件项目的源文件中声明并使用外部变量和外部函数

在多文件项目的源文件中声明并使用外部变量和外部函数-Keil小技巧
在Keil环境下开发比较大的项目时,往往需要在项目中加入多个源文件
而不同源文件内,可能会有一些变量和函数是开放为其它源文件使用的
但默认情况下,在源文件内部定义的变量和函数只在本源文件可见(可使用)
如果需要跨源文件使用则需要遵循一定的规则进行定义和声明

对于需要跨源文件访问变量:
1、变量必须定义为全局变量
   所谓全局变量就是在函数外部定义,在函数内部定义的变量为局部变量
   由于局部变量的作用域仅在定义的函数内部,且生命周期在函数返回时就结束了
   所以要使变量能跨源文件访问,变量必须定义为全局变量
2、变量必须定义为非静态变量
   使用static关键字定义的变量为静态变量,静态变量作用域仅为本源文件,外部源文件不可访问。
   所以要使变量能跨源文件访问,变量必须定义为非静态变量,即定义时不要使用static关键字
   
3、不同的源文件中不可定义名称相同的全局变量
   如果在不同源文件中定义名称相同的全局变量,编译器会如下错误提示
   
4、在需要使用外部变量的源文件内使用extern声明变量
   
   如果需要在多个源文件中使用同一个外部变量,可将上面的外部声明语句
   放在.h文件中,在需要使用这个变量的源文件中include一下这个头文件即可

同样的,若需要跨源文件调用外部函数:
1、函数必须定义为非静态函数
   使用static关键字定义的函数为静态函数,静态函数作用域仅为本源文件,外部源文件不可访问。
   所以要使函数能跨源文件访问,必须定义为非静态函数,即定义函数时不要使用static关键字
   
2、不同的源文件中不可定义名称相同的非静态函数
   如果在不同源文件中定义名称相同的非静态函数时,编译器会如下错误提示
   
3、在需要调用外部函数的源文件内直接声明一下即可
   对于外部函数声明,是否使用extern关键字,编译时都可通过
   
   如果需要在多个源文件中使用同一个外部函数,可将上面的外部声明语句
   放在.h文件中,在需要调用这个函数的源文件中include一下这个头文件即可

神农鼎 发表于 2023-5-2 09:46:32

必须点赞,好文{:4_213:}

延伸阅读:STC程序中头文件的使用方法


STC程序中头文件的使用方法 - 编译器/仿真器/ISP下载/做自己的ISP/ID号加密/程序加密后传输 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)


WHX 发表于 2023-5-2 08:09:51

好贴好文,顶一下{:tongue:}

神农鼎 发表于 2023-5-2 17:11:08

延伸阅读:
如何在 KEIL C251编译器中 将函数编译到指定地址 !
第一步、直接编译,打开MAP文件,并找到函数funtest的链接名称,如下图
https://www.stcaimcu.com/data/attachment/forum/202304/28/085841zcfat6zqmffqya3j.png
第二步、在项目选项的“L251 Locate”页进行如下设置
https://www.stcaimcu.com/data/attachment/forum/202304/28/085841xccys7snsbzyp0sy.png
第三步、重新编译即可
https://www.stcaimcu.com/data/attachment/forum/202304/28/085841ynnnu87h8h2hosl0.png

lzzasd 发表于 2023-7-10 21:05:39

简单的举例说就是先在变量使用的 KEY.C 文件内声明一个全局变量 bit KEY_OK   再在对应的KEY.H内部声明引用 extern bit KEY_OK;       最后需要调用这个KEY_OK变量的 Uart.C 文件的开头声明下#include"KEY.H" 就可以调用这个变量并对其进行操作   同样的其他文件调用只要在前面加入#include"KEY.H"就可以调用使用了

_奶咖君_ 发表于 2023-12-19 17:41:58

对于现代的编程思想来说,,单片机的开发已经不在是,一个人一块板一个电脑一晚上了。所以对于外部变量的使用,请给我API让我去调用。对于我的错误输入,应该给我响应的错误反馈。不能在简单的extern 一下就用。当然,,如果这些文件是你自己一个人的,那就无所谓了,无非是降低一点移植性。但如果你是给别人用,,那就会让人很抓马了。编程的思想是不是也应在在论坛里说一说了。
页: [1]
查看完整版本: Keil小技巧-在多文件项目的源文件中声明并使用外部变量和外部函数