C语言h文件头中的变量初始化

很多时候,C程序员需要在文件头中初始化变量,如果没有好的宏定义方式,往往会导致多个文件引用时,出现大量编译错误。以下C文件头定义方式,可以很好避免这些错误出现:

1.编写c_def.h文件头,内容为:

  #undef  INIT_DEF_VAR  
  #undef  DEF_EX
  #undef  DEF_EX_I 
   #define  DEF_EX           extern            

  #define  DEF_EX_I(x1)     extern  x1;   

2.编写def_var.h文件头,内容为:

      #undef      DEF_EX
      #undef      DEF_EX_I
     
 ///////////////////////////////////////////////////////    
      #define     DEF_EX  
      #define     DEF_EX_I(x1) x1  
      #define     INIT_DEF_VAR

3.编写用户文件头,例如eye.h

  

4.编写另一个用户文件头,例如hd.h

#ifndef __HD_H__
#define __HD_H__

#include "c_def.h"

#ifdef  _NOW_DEF_VAR_HD
      #include "def_var.h"
#endif 

//////////////////////

#include "eye.h"   //文件头相互嵌套,没有问题

/////////////////////////

DEF_EX int hdi1; //每一个变量前面添加DEF_EX
/////////////////////////////////
/////////////////////////////////
/////////////////////////////////
/////////////////////////////////
struct STDEMO
{
    int x;
    float y;
};

//以下为有初始化值的变量//如果需要初始化变量前面添加DEF_EX_I
DEF_EX_I(struct STDEMO stDemo1[])
 #ifdef INIT_DEF_VAR
 ={
    {33,3.4},
    {27,9.7}
 };
 #endif      

//////////////////////////////

void prg2(void);

#endif

5. 编写C函数实体,例如eye.c

  #define _NOW_DEF_VAR_EYE  //这个宏定义用于实例化在eye.h中定义的变量。书写格式为_NOW_DEF_VER_加上文件头的名字EYE
  #include"eye.h" 


  void prg1(void)
  {
      testi1=10;
      testdat1[1]=20;
      testint1=8;
  }

 6.编写另外一个C函数实体文件,例如hd.c

#define _NOW_DEF_VAR_HD//这个宏定义用于实例化在hd.h中定义的变量。书写格式为_NOW_DEF_VER_加上文件头的名字HD

#include"eye.h" 
#include"hd.h" 

void prg2(void)
{
    testi1=30;
    testdat1[1]=15;
    hdi1=10;
    stDemo1[1].x=5;
}

 

 6.编写主函数main.c


#include"eye.h" 
#include"hd.h"

void Main(void)
{
    prg1();
    prg2();
    testi1=12;
    testdat1[1]=13; 

}
 7.编译。结果可以看到,不管文件头.h文件怎么嵌套引用,所有变量(包括初始化了的变量)都不会出现错误或报警。

   案例文件下载
   机器视觉产品 

 

 

posted @ 2012-09-12 13:47  数磊  阅读(1636)  评论(0编辑  收藏  举报