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


    今天在头文件.h中初始化了一个数组和函数,在编译的时候提示这个数组和函数重新定义了,检查后发现,犯了一个致命的错误,在头文件中定义变量。。。

    以下引用别人的一篇说明,警示自己。

    C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能,C语言模块化程序设计需理解如下概念:

        (1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;

        (2) 某模块提供给其它模块调用的外部函数及数据需在.h中文件中冠以extern关键字声明;

        (3) 模块内的函数和全局变量需在.c文件开头冠以static关键字声明;

        (4) 永远不要在.h文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。如:


    int a = 5;

    #include "module1.h"

    #include "module1.h"

    #include "module1.h"

      以上程序的结果是在模块1、2、3中都定义了整型变量a,a在不同的模块中对应不同的地址单元,这个世界上从来不需要这样的程序。正确的做法是:


    extern int a;

    #include "module1.h" int a = 5;

    #include "module1.h"

    #include "module1.h"

    这样如果模块1、2、3操作a的话,对应的是同一片内存单元。

    原博客:http://blog.chinaunix.net/uid-27656723-id-3345302.html

  • 相关阅读:
    【转】Android-Input input&按键布局文件
    【转】Android-Input 触摸设备
    【转】IE沙箱拖拽安全策略解析
    FireFox 插件xpi文件签名2
    如何给Firefox附加组件签名
    【转】用opencv使摄像头在30fps下捕获1080p的数据
    Displaylink安卓驱动
    无主之地2 不费子弹手枪
    jsoncpp
    [APIO2010] 算法竞赛竞赛经典 巡逻
  • 原文地址:https://www.cnblogs.com/zzdbullet/p/9963098.html
Copyright © 2020-2023  润新知