当前位置: 首页 > article >正文

C 语言函数指针 —— 实现程序分层

通过函数指针实现上层与底层应用的分层,将有助于代码更便于 Debug。

在 main.c 中只做最简单的调用,有助于条理清晰。

//
//  main.c
//  testc
//
//  Created by Joey Wang on 2024/11/8.
//

#include <stdio.h>
#include "myfunc_config.h"

int main(int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    myc.p_func1();
    myc.p_func2();
    myc.p_func3();
    myc.p_func4();
    for(int i = 0; i < 4; i++)
    {
        myc.pp_arrary[i]();
    }
    return 0;
}

在 myfunc_config.h 中,定义需要使用到的底层函数调用,其中的 func1, fun2, func3, func4 是实际的函数:

//
//  myfunc_config.h
//  testc
//
//  Created by Joey Wang on 2024/11/8.
//
#include "myfunc.h"

p_func p_func_array[4]
= {func1, func2, func3, func4};

my_func_t myc =
{
    .p_func1 = func1,
    .p_func2 = func2,
    .p_func3 = func3,
    .p_func4 = func4,
    .pp_arrary = p_func_array,
};

在 my_func.c 中放的是实际要使用到的函数:

//
//  myfunc.c
//  testc
//
//  Created by Joey Wang on 2024/11/8.
//
#include "myfunc.h"
#include "stdio.h"

void func1(void)
{
    printf("hello, I am fun1\r\n");
}

void func2(void)
{
    printf("hello, I am fun2\r\n");
}

void func3(void)
{
    printf("hello, I am fun3\r\n");
}

void func4(void)
{
    printf("hello, I am fun4\r\n");
}

在 my_func.h 对 my_func.c 中的函数进行声明,并在其中构造抽象数据类型,供 my_func_config.h 使用:

 

//
//  myfunc.h
//  testc
//
//  Created by Joey Wang on 2024/11/8.
//
#ifndef __MY_FUNC
#define __MY_FUNC

typedef void (*p_func)(void);

typedef struct my_func
{
    p_func p_func1;
    p_func p_func2;
    p_func p_func3;
    p_func p_func4;
    p_func* pp_arrary;
}my_func_t;

void func1(void);
void func2(void);
void func3(void);
void func4(void);

#endif


http://www.kler.cn/a/385652.html

相关文章:

  • 【C++】 list 与 string 基础与实现字符串操作
  • 智慧仓储物流可视化平台
  • 攻防世界37-unseping-CTFWeb
  • 《硬件架构的艺术》笔记(一):亚稳态
  • 蓝桥杯-洛谷刷题-day2(C++)
  • android studio导入OpenCv并改造成.kts版本
  • 腾讯为什么支持开源?
  • SpringMVC执行流程与运行原理解析
  • 智能提醒助理系列-springboot项目彩虹日志+TraceID
  • 基于单片机的智能家居安防系统设计
  • Vite与Vue Cli的区别与详解
  • 985研一学习日记 - 2024.11.8
  • 浅谈绝缘测试以及压缩电机应用
  • 青少年学习倦怠测评
  • 算法(第一周)
  • 鸿蒙ArkTS中的获取网络数据
  • Golang | Leetcode Golang题解之第551题学生出勤记录I
  • 一步一步从asp.net core mvc中访问asp.net core WebApi
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十六章 C++入门
  • 精选 Top10 开源调度工具,解锁高效工作负裁自动化
  • Linux基础(2)
  • 【LGBM】LightGBM sklearn API超参数解释与使用方法(优化)
  • PICO+Unity MR空间网格
  • GPT对NLP的冲击
  • Multi Agents协作机制设计及实践
  • 下载mysql的jar,添加至jmeter中,编写jdbc协议脚本1106