• 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文件怎么嵌套引用,所有变量(包括初始化了的变量)都不会出现错误或报警。

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

    www.shuleikeji.com
  • 相关阅读:
    Linux 进程--父进程查询子进程的退出状态
    Node.js的require()的工作原理
    SSH免密码登录
    Nginx 配置 HTTPS自签名证书
    加密算法
    java.sql.SQLException: The user specified as a definer ('userxxx'@'%') does not exist
    Unsupported major.minor version 52.0
    Java iBatis使用List类型参数(解决List为空的报错问题)
    Java使用iBatis批量插入数据到Oracle数据库
    Hive時間函數-年份相加減
  • 原文地址:https://www.cnblogs.com/dongchunxiao/p/2681095.html
Copyright © 2020-2023  润新知