多个".h"文件中声明及定义 全局变量和函数
一、".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"文件中声明及定义 全局变量和函数的更多相关文章
- 在源文件(.c)和头文件(.h)中声明和定义的区别——C语言
最近在看多文件编程的时候遇到的一个问题,本来以为理解了声明和定义的区别(然而并没有····),也算是重新认识了一次声明和定义,下面上代码 情形一:在源文件(.c)中 相信大部分读者对声明和定义的理解是 ...
- C++编译错误 --- 成员函数定义在 .h 文件中出现重定义错误(Error LNK 2005)
今天写了一个简单的类,定义在 .h 文件中, 类很简单就将其成员函数定义在了一起(class类后面).运行的时候出现了如下图所示的编译错误(error LNK2005) 查资料,大部分都是说需要加上 ...
- c++多个文件中如何共用一个全局变量
例子: 头文件:state.h 源文件:state.cpp 其它源文件:t1.cpp t2.cpp t3.cpp, 这些源文件都包含头文件state.h. 需要定义一个全局变量供这些源文件中使 ...
- 不要在.h文件中定义变量
今天在头文件.h中初始化了一个数组和函数,在编译的时候提示这个数组和函数重新定义了,检查后发现,犯了一个致命的错误,在头文件中定义变量... 以下引用别人的一篇说明,警示自己. C语言作为一种结构化的 ...
- 最新版的stm32f1xx.h文件中取消了u8, u16, u32的类型定义
使用芯片stm32f103zet6和stm32l151c8t6,在移植程序时发现,编译器提示u8未定义: 在Keil MDK 开发环境里,st定义无符号32位整形数据有很多种表示方法: 1 unsig ...
- 关于在.H文件中定义变量
KEIL中,在".H"文件定义变量. 如果该".H"文件同时被两个".C"文件调用,则会出现重复定义错误(*** ERROR L104: M ...
- [C/C++]在头文件中使用static定义变量意味着什么
文章出处:http://www.cnblogs.com/zplutor/ 看到有一位同学在头文件中这么写: static const wchar_t* g_str1 = - static const ...
- [转载]C++中声明与定义的区别
C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中.它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件中,什么不能.什么东西又可以放在cpp文件中.如果 ...
- 为什么C++中声明和定义要分开写
现在开始写项目了,你会发现我们一般都要写一个cpp,对应的还得有一个h文件,那么为什么在C++中我们要这么做? .h就是声明,.cpp就是实现,而所谓分离式实现就是指"声明"和&q ...
随机推荐
- hibernate_HelloWorld
环境准备 1.下载 hibernate 3.3.2: 2.下载 hibernate 3.4.0: 3.注意阅读 hibernate compatibility matrix(hibernate 网站, ...
- centos7按报错dracut
在Windows下,将从CentOS官网上下载的CentOS7镜像文件,用UltrISO以硬盘镜像方法写入U盘 安装过程中出现下面错误: dracut-initqueue[624]:Warning: ...
- JavaRebel 2.0 发布,一个JVM插件
JavaRebel是一个JVM插件(-javaagent),能够即时重载java class更改,因此不需要重新部署一个应用或者重启容器,节约开发者时间. JavaRebel 2.0的新特征: 改变了 ...
- 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 正解:暴搜+ ...
- JS显示上一周
<html> <head> <script> var currDT; var aryDay = new Array("日","一&qu ...
- Java-笔记1
/* 对第一个java程序进行总结 1. java程序编写-编译-运行的过程 编写:我们将编写的java代码保存在以".java"结尾的源文件中 编译:使用javac.exe命令编 ...
- ES6介绍
1.ES6简介 ECMAScript 6.0,是 JavaScript 语言下一代标准,发布于 2015 年 6 月.它的目标是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业 ...
- Excle 常用函数
1. 查找函数VLOOKUP 使用示例: =VLOOKUP(A1,$C$1:$D$19,2,0) 表示以A1单元格为基准,匹配C1开始到D19的范围数据,在公式行显示D单元格文本,也就是匹配范围的第二 ...
- 获取Grid后台动态添加的子项
例:Grid的子项是包含边框的复选框CheckBox //遍历Grid中的子项 foreach (var c in this.grid_box.Children) { Border bd = c as ...
- BZOJ3170: [Tjoi2013]松鼠聚会(切比雪夫距离转曼哈顿距离)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1524 Solved: 803[Submit][Status][Discuss] Descripti ...