代码之家  ›  专栏  ›  技术社区  ›  St.Antario

将静态函数分离到C中的另一个(头?)文件中

  •  1
  • St.Antario  · 技术社区  · 6 年前

    logic.h :

    #ifndef LOGIC_H
    #define LOGIC_H
    
    enum logic_type{
        customer_logic = 1,
        requestor_logic,
        company_logic
    }
    
    void execute_logic(enum logic_type logic_type);
    
    #endif //LOGIC_H
    

    logic.c :

    #include "logic.h"
    
    static void _execute_customer_logic();
    static void _execute_requestor_logic();
    static void _execute_company_logic();
    
    void execute_logic(enum logic_type logic_type){
        switch(logic_type){
            case customer_logic:
                _execute_customer_logic();
                break;
            case requestor_logic:
                _execute_requestor_logic();
                break;
            case company_logic:
                _execute_company_logic();
                break;
        }
    }
    
    void _execute_customer_logic(){
        //very long and complicated function
    }
    
    void _execute_requestor_logic(){
        //very long and complicated function
    }
    
    void _execute_company_logic(){
        //very long and complicated function
    }
    

    现在的设计看起来真的很乱。所以我想把每个逻辑放在一个单独的私有头文件中,然后简单地包含它。就像

    company_logic_internal.h :

    #ifndef COMPANY_LOGIC_INTERNAL_H
    #define COMPANY_LOGIC_INTERNAL_H
    
        void _execute_company_logic(){
            //very long and complicated function
        }
    
    #endif //COMPANY_LOGIC_INTERNAL_H
    

    问题是,我在头文件中放入了一个实现,它看起来与包含函数原型的头文件定义相矛盾,但与实际定义不一致。做这个 company_logic.h company_logic.c .c 文件将包括在内。

    所以我有点困惑如何更好地实施这样的事情。

    1 回复  |  直到 6 年前
        1
  •  1
  •   ShivYaragatti    6 年前

    因此,不需要计算头文件(.h文件)的数量,而要计算.c文件,即每个函数可以在单独的.c文件中定义并创建 static library (例如:company\u private.a),您没有提到您使用什么编译器,而是与 gcc 您可以使用控制对库的访问 visibility 选项或 --exclude-libs (尽管不确定所有的工具链都支持它),并将其链接到要使用这些API的程序。

    http://www.codingfleets.com/2018/12/how-to-create-static-library-in-c.html

    如果您使用的是gcc工具链,那么您可以在网上找到很多关于限制符号可见性的文档。