gpt4 book ai didi

c - 函数名作为 C 中 main 的参数

转载 作者:太空狗 更新时间:2023-10-29 17:15:01 25 4
gpt4 key购买 nike

我有一个主要功能如下:

#include <stdio.h>

int main(int argc, char *argv[])
{
int i, sum = 0;
char *func_user = argv[1];

// execute func_user function

return 0;
}

void foo1(void)
{
printf("I'm foo1.");
}

void foo2(void)
{
printf("I'm foo2.");
}

void foo3(void)
{
printf("I'm foo3.");
}

我希望用户将他的函数名称作为 main 的参数,我希望我的程序执行这个给定的函数。有没有什么方法可以做到这一点(比如使用反射)而不使用 switch/case 之类的方法?

最佳答案

不能直接做,因为C都没有introspection也不reflection .您必须自己映射一个名称(一个字符串)到一个(指向一个)函数。

创建此类映射的一种常见方法是使用包含该信息的结构,然后将这些结构的数组用于所有函数。然后遍历数组以查找名称及其函数指针。

也许是这样的

struct name_function_map_struct
{
char *name; // Name of the function
void (*function)(void); // Pointer to the function
};

// Declare function prototypes
void foo1(void);
void foo2(void);
void foo3(void);

// Array mapping names to functions
const struct name_function_map_struct name_function_map[] = {
{ "foo1", &foo1 },
{ "foo2", &foo2 },
{ "foo3", &foo3 }
};

int main(int argc, char *argv[])
{
// Some error checking
if (argc < 2)
{
// Missing argument
return 1;
}

// Calculate the number of elements in the array
const size_t number_functions = sizeof name_function_map / sizeof name_function_map[0]

// Find the function pointer
for (size_t i = 0; i < number_functions; ++i)
{
if (strcmp(argv[1], name_function_map[i].name) == 0)
{
// Found the function, call it
name_function_map[i].function();

// No need to search any more, unless there are duplicates?
break;
}
}
}

// The definitions (implementations) of the functions, as before...
...

关于c - 函数名作为 C 中 main 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45327198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com