通过函数指针实现上层与底层应用的分层,将有助于代码更便于 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