微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 有关头文件写法或者函数声明调用的小技巧分享

有关头文件写法或者函数声明调用的小技巧分享

时间:10-02 整理:3721RD 点击:
能解决的问题:
1) 经常有初学者对.h文件和.c文件里面函数/变量的声明 、调用的方式无法理解或者无法很直接透彻的方式理解,本帖对此理解应该有所帮助;
2)很多写了2、3年C的单片机应用开发者对.h文件 、 .c文件的书写感觉规范性不够好,书写比较乱,本贴可以给出一种比较清晰、明了的书写格式;
3)函数声明、其他C文件调用另一个C文件的函数使用extern关键字比较频繁、编译器偶尔报错偶尔不报错,导致运行时代码无故死机、重启,有时跟函数声明、调用的有问题而编译器没有报错,本贴但愿能给出简单的建设性意见。
一般文件声明、定义、调用的格式如下:
应用场景介绍:a.C 文件  、a.H文件  是两个相关文件 ,b.c文件调用a.c文件中的定义的函数void a_function1(void);
一般文件书写格式:
/***************************
a.H文件
*****************************/
void  a_fuction1(void);  // 声明该函数

/***************************
a.C 文件
*****************************/
#include"a.h"      
   
  //----------此处顺便介绍一下<>和引号的区别,【引号】表示优先在当前工程文件目录查找文件,再再IDE安装文件目录查找该文件,【<>】 表示直接在IDE安装目录下查找该文件,兵添加到当前C文件的当前位置;
void  a_fuction1(void)  // 定义该函数的具体实现
{
             unsigned char aaa;

              aaa=11;
}

/***************************
b.C 文件
*****************************/
extern  void  a_fuction1(void);   // 告诉编译器该函数在别处已经声明并且定义了,无需为其重新分配地址空间
//==============================================================
以下是准备推荐一种c文件、h文件的写法
/***************************
aa.H文件
*****************************/
#ifdef   aa_h
     #define  EXT              // -------定义EXT 为空
#else
    #define  EXT   extern  //--------- 定义EXT 为extern ,后面的剧情大家大概猜到了吧
#endif
EXT  void  aa_fuction1(void);  // 声明该函数

/***************************
aa.C 文件
*****************************/
#define  aa_h            //此处有的定义虽为空,但是还是定义了----很重要的定义
#include"aa.h"      
void  aa_fuction1(void)  // 定义该函数的具体实现
{
             unsigned char aaa;

              aaa=11;
}

/***************************
bb.C 文件
*****************************/
#include"aa.h"      // 直接包含头文件即可实现调用,不用逐个书写extern +函数/全局变量的形式,比较简洁

注: 如果有其他疑问或者建议,可以在下方回帖,欢迎讨论。

抢个沙发,小编写的很好!

谢谢小编分享。

你好,头文件里可以定义变量吗?如果可以,怎么定义

很好的用法,谢谢分享

没太明白,extern void  aa_fuction1(void); 和 void  aa_fuction1(void);都是外部声明吧?

个人感觉都一样。

不错,学习了

不错,值得新手学习

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top