多个".h"文件中声明及定义 全局变量和函数
2017-07-13 16:03
357 查看
【搞WinLex-Bison,要写C语言程序,struct关键字, extern,这些绕了弯路。尤其是struct,C里面每次用都要显示的写出来struct关键字。
有个Node.h和Node.c,里面很多方法要被别的c和cpp文件引用,但是c引用要用extern,cpp引用要用extern "C",所以就不能直接在Node.h里面准备好所有的extern,要分别在引用的c和cpp里面去写。】
原文链接:http://blog.sina.com.cn/s/blog_537d61430101cwv1.html
一、".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
有个Node.h和Node.c,里面很多方法要被别的c和cpp文件引用,但是c引用要用extern,cpp引用要用extern "C",所以就不能直接在Node.h里面准备好所有的extern,要分别在引用的c和cpp里面去写。】
原文链接:http://blog.sina.com.cn/s/blog_537d61430101cwv1.html
一、".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"文件中声明及定义 全局变量和函数
- 多个".h"文件中声明及定义 全局变量和函数
- 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法!
- C++学习 【4.5】 利用函数实现指定的功能---局部变量、全局变量、变量的存储类别、声明和定义
- VC++如何声明定义全局函数与全局变量
- 全局变量一定要在cpp中定义,在.h文件中定义会出现错误error LNK2005: "m_mysqlpack" ** already defined in**
- C++多文件中全局变量的声明与定义
- extern用法,全局变量,全局函数与头文件(重复定义)
- 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法!
- 解决多重定义问题/如何声明全局变量让多个cpp文件使用
- C语言如何跨文件调用函数定义中声明的变量
- 怎样定义和声明全局变量和函数最好?
- C怎样定义和声明全局变量和函数最好?
- keil 中——C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法
- C语言如何跨文件调用函数定义中声明的变量
- 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法
- VC6.0下调用Dll文件提供的函数接口和全局变量(转)
- 关于头文件中定义的全局变量的包含
- C++ 变量和函数的声明和定义
- 静态函数里定义的变量,不为所有对象共享,类的静态变量和类外全局变量区别,静态函数和普通函数区别