使用C语言写一段代码,定义三个不同参数长度的函数,函数func_A有一个参数int,函数func_B有2个参数int、char,函数func_C有3个参数char、bool、char。用一个结构体数组func_dict存放函数id和函数指针的关系。通过id实现对函数的调用。
时间: 2024-09-19 11:01:03 浏览: 34
解析C++函数的默认参数和占位参数及较之C语言的拓展
在C语言中,你可以定义一个结构体`FunctionInfo`来存储函数名和函数指针,然后创建一个这样的结构体数组`func_dict`。下面是一个示例代码:
```c
#include <stdio.h>
#include <string.h>
typedef enum { ID_A, ID_B, ID_C } FunctionID;
// 定义函数指针类型
typedef void (*FunctionType)(int, char, bool, char);
// 结构体定义
struct FunctionInfo {
FunctionID id;
FunctionType func;
};
// 实现的函数
void func_A(int param) {
printf("func_A called with int parameter: %d\n", param);
}
void func_B(int param1, char param2) {
printf("func_B called with int and char parameters: %d, '%c'\n", param1, param2);
}
void func_C(char param1, bool param2, char param3) {
printf("func_C called with char, bool, and char parameters: '%c', %d, '%c'\n", param1, param2 ? 1 : 0, param3);
}
// 动态初始化函数表
const struct FunctionInfo func_dict[] = {
{ ID_A, func_A },
{ ID_B, func_B },
{ ID_C, func_C }
};
// 根据函数ID调用相应的函数
void call_function(FunctionID id, ...) {
va_list args; // 变长参数列表
va_start(args, id); // 初始化参数指针
if (id == ID_A) {
int param = va_arg(args, int); // 从参数列表获取整数参数
func_dict[id].func(param); // 调用对应函数
} else if (id == ID_B) {
int param1 = va_arg(args, int);
char param2 = va_arg(args, char);
func_dict[id].func(param1, param2);
} else if (id == ID_C) {
char param1 = va_arg(args, char);
bool param2 = va_arg(args, bool);
char param3 = va_arg(args, char);
func_dict[id].func(param1, param2, param3);
}
va_end(args); // 清理参数指针
}
int main() {
call_function(ID_A, 10); // 调用func_A
call_function(ID_B, 20, 'a'); // 调用func_B
call_function(ID_C, 'b', true, 'c'); // 调用func_C
return 0;
}
```
在这个例子中,`call_function`函数使用变长参数列表`va_list`来接受不同数量的参数,然后根据函数ID找到对应的函数并调用。
阅读全文