• c模块化编程


    C语言模块化编程(封装)

    • 模块即是一个.c 文件和一个.h 文件的结合,头文件(.h)中是对于该模块接口的声明。模块化的实现方法和实质:将一个功能模块的代码单独编写成一个.c文件,然后把该模块的接口函数放在.h文件中。
    • 对外发布的模块调用本质上是一个编译好的.so或.a或.o的二进行制文件加一个.h文件的组。
    • 不要在.h文件中定义变量,如果不同的模块包含该.h文件,则在不同的模块中该变量对应不同的地址。
    • 模块内的函数和模块内的全局变量需在.c 文件开头冠以static 关键字声明,一方面是限定了函数的作用范围只是在本模块中起作用,另一方面也给人传达这样的信息:该函数不会被其他模块调用。
    • 函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变,赋值操作除外。
    • 一个模块提供给其它模块调用的外部函数及数据需在.h 中文件中冠以extern 关键字声明。
    • extern会破坏模块的封装性,不建议使用, 因此extern一般用于全局变量的声明。

    extern的预处理示例:

    /* in var_a.h */
    #ifdef VAR_GLOBAL
    #define VAR_EXT
    #else
    #define VAR_EXT extern
    #endif
    
    VAR_EXT int var1;
    VAR_EXT int var2;

      如果var_b.h包含了var_a.h且在var_b.h中有以下宏定义

    #define VAR_GLOBAL

      由于VAR_GLOBAL被定义为空,于是变量展开为

    int var1;
    int var2;

      如果在var_b.h包含了var_a.h但在var_b.h中没有以上宏定义则变量展开为

    extern int var1;
    extern int var2;
  • 相关阅读:
    今天在国外网站上做了个测试,结果竟然这样
    中考总算考完了
    [转]从磁芯大战谈汇编
    位运算Pascal相关函数/过程
    本Blog已经迁往Wordpress.com
    PhyTopic测试结果...
    POJ1273 dinic Pascal模板
    C#解析xml文件
    并行和并发
    RI工具库参考
  • 原文地址:https://www.cnblogs.com/tongyishu/p/11691050.html
Copyright © 2020-2023  润新知