一、".h"文件必须以如下格式书写

例:文件《CZ_efg_hi.h"》

------------文件内容-----------

#ifndef CZ_Efg_Hi_H

#define CZ_Efg_Hi_H

.....

所有文件内容

.....

#endif

---------------------------------

二、全局变量 在".h"文件中声明,在".c"文件中定义及初始化

例:某2个全局变量

小型程序中 :

unsigned char CommandStackAppendPoint=0;

bit CommandStackOverflow=0;

在大型程序中

".h"文件 只声明

extern unsigned char CommandStackAppendPoint;

extern bit CommandStackOverflow;

".c"文件 定义及初始化

unsigned char CommandStackAppendPoint=0;

bit CommandStackOverflow=0;

三、特别要注意数组类型的声明及定义

[]里空的表示“声明”,[]里定义了长度则表示“定义”

普通数组

小型程序中

unsigned char SerialRxDataBuffer[4];

大型程序中

".h"文件 声明([]中空的)

extern unsigned char SerialRxDataBuffer[];

".c"文件 定义([]中定义了长度)

unsigned char SerialRxDataBuffer[4]={0,1,2,3};

结构数组

小型程序

extern struct Command
      {
       unsigned char DeviceCode;

unsigned char ControlParameter;

unsigned char DataH;

unsigned char DataL;一个15位的数值
      } CommandStack[4];

大型程序

".h"文件

extern struct Command
         {
          unsigned char DeviceCode;

unsigned char ControlParameter;

unsigned char DataH;

unsigned char DataL;一个15位的数值
         } ;

extern struct Command CommandStack[];

".c"文件

struct Command CommandStack[4];

四、函数声明

只要在".h"文件内将所有生命的函数前加上extern即可

小型程序

void InitCommandStack() ; //初始化命令堆栈 ,  将所有值置0

大型程序

extern void InitCommandStack() ; //初始化命令堆栈 ,  将所有值置0

多个".h"文件中声明及定义 全局变量和函数的更多相关文章

  1. 在源文件(.c)和头文件(.h)中声明和定义的区别——C语言

    最近在看多文件编程的时候遇到的一个问题,本来以为理解了声明和定义的区别(然而并没有····),也算是重新认识了一次声明和定义,下面上代码 情形一:在源文件(.c)中 相信大部分读者对声明和定义的理解是 ...

  2. C++编译错误 --- 成员函数定义在 .h 文件中出现重定义错误(Error LNK 2005)

    今天写了一个简单的类,定义在 .h 文件中, 类很简单就将其成员函数定义在了一起(class类后面).运行的时候出现了如下图所示的编译错误(error LNK2005) 查资料,大部分都是说需要加上 ...

  3. c++多个文件中如何共用一个全局变量

    例子: 头文件:state.h   源文件:state.cpp 其它源文件:t1.cpp  t2.cpp  t3.cpp, 这些源文件都包含头文件state.h. 需要定义一个全局变量供这些源文件中使 ...

  4. 不要在.h文件中定义变量

    今天在头文件.h中初始化了一个数组和函数,在编译的时候提示这个数组和函数重新定义了,检查后发现,犯了一个致命的错误,在头文件中定义变量... 以下引用别人的一篇说明,警示自己. C语言作为一种结构化的 ...

  5. 最新版的stm32f1xx.h文件中取消了u8, u16, u32的类型定义

    使用芯片stm32f103zet6和stm32l151c8t6,在移植程序时发现,编译器提示u8未定义: 在Keil MDK 开发环境里,st定义无符号32位整形数据有很多种表示方法: 1 unsig ...

  6. 关于在.H文件中定义变量

    KEIL中,在".H"文件定义变量. 如果该".H"文件同时被两个".C"文件调用,则会出现重复定义错误(*** ERROR L104: M ...

  7. [C/C++]在头文件中使用static定义变量意味着什么

    文章出处:http://www.cnblogs.com/zplutor/ 看到有一位同学在头文件中这么写: static const wchar_t* g_str1 = - static const ...

  8. [转载]C++中声明与定义的区别

    C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中.它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件中,什么不能.什么东西又可以放在cpp文件中.如果 ...

  9. 为什么C++中声明和定义要分开写

    现在开始写项目了,你会发现我们一般都要写一个cpp,对应的还得有一个h文件,那么为什么在C++中我们要这么做? .h就是声明,.cpp就是实现,而所谓分离式实现就是指"声明"和&q ...

随机推荐

  1. hibernate_HelloWorld

    环境准备 1.下载 hibernate 3.3.2: 2.下载 hibernate 3.4.0: 3.注意阅读 hibernate compatibility matrix(hibernate 网站, ...

  2. centos7按报错dracut

    在Windows下,将从CentOS官网上下载的CentOS7镜像文件,用UltrISO以硬盘镜像方法写入U盘 安装过程中出现下面错误: dracut-initqueue[624]:Warning: ...

  3. JavaRebel 2.0 发布,一个JVM插件

    JavaRebel是一个JVM插件(-javaagent),能够即时重载java class更改,因此不需要重新部署一个应用或者重启容器,节约开发者时间. JavaRebel 2.0的新特征: 改变了 ...

  4. bzoj3882 [Wc2015]K小割

    Description Input Output Sample Input 3 3 1 3 100 1 2 3 2 3 4 1 3 5 Sample Output 8 9 12 -1   正解:暴搜+ ...

  5. JS显示上一周

    <html> <head> <script> var currDT; var aryDay = new Array("日","一&qu ...

  6. Java-笔记1

    /* 对第一个java程序进行总结 1. java程序编写-编译-运行的过程 编写:我们将编写的java代码保存在以".java"结尾的源文件中 编译:使用javac.exe命令编 ...

  7. ES6介绍

    1.ES6简介 ECMAScript 6.0,是 JavaScript 语言下一代标准,发布于 2015 年 6 月.它的目标是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业 ...

  8. Excle 常用函数

    1. 查找函数VLOOKUP 使用示例: =VLOOKUP(A1,$C$1:$D$19,2,0) 表示以A1单元格为基准,匹配C1开始到D19的范围数据,在公式行显示D单元格文本,也就是匹配范围的第二 ...

  9. 获取Grid后台动态添加的子项

    例:Grid的子项是包含边框的复选框CheckBox //遍历Grid中的子项 foreach (var c in this.grid_box.Children) { Border bd = c as ...

  10. BZOJ3170: [Tjoi2013]松鼠聚会(切比雪夫距离转曼哈顿距离)

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1524  Solved: 803[Submit][Status][Discuss] Descripti ...