结构体函数注册使用
知识点
- 结构体
- 宏定义
- 结构体成员的使用
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
struct test
{
void (*test_fun)(void);
};
#define register_test(test_func) \
struct test test_func
void sum(void)
{
int x = 10, y = 10;
int sum;
sum = x + y;
printf("sum = %d\n", sum);
getchar();
}
int main()
{
register_test() test_middle = {
.test_fun = sum,
};
test_middle.test_fun();
return 0;
}
代码注释
#include <stdio.h>
#include <stdlib.h>
struct test
{
void (*test_fun)(void);
};
#define register_test(test_func) \
struct test test_func
void sum(void)
{
int x = 10, y = 10;
int sum;
sum = x + y;
printf("sum = %d\n", sum);
getchar();
}
int main()
{
// 定义了一个结构体变量 test_middle,并使用 register_test 宏对其进行声明
register_test() test_middle = {
.test_fun = sum, // 将 sum 函数赋值给 test_fun 成员
};
test_middle.test_fun(); // 调用 test_fun 成员函数
return 0;
}
代码解释
1. `#include <stdio.h>`:包含了标准输入输出函数的头文件。
2. `#include <stdlib.h>`:包含了一些标准库函数的头文件。
3. `struct test`:定义了一个结构体类型 test,其中有一个函数指针成员 test_fun。
4. `#define register_test(test_func) ...`:使用宏定义定义了一个宏 register_test,用于快速声明结构体变量。
5. `void sum(void)`:定义了一个无返回值、无参数的函数 sum,用于计算两个数的和并输出结果。
6. `int main()`:程序的入口函数。
7. `register_test() test_middle = { ... };`:声明了一个结构体变量 test_middle,并使用 register_test 宏进行声明。
8. `.test_fun = sum`:将 sum 函数赋值给 test_fun 成员。
9. `test_middle.test_fun();`:通过结构体变量 test_middle 调用 test_fun 成员函数。
10. `return 0;`:返回程序执行成功的标志。