Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C用宏进行非单调化_C_Function_Macros_Stringification - Fatal编程技术网

C用宏进行非单调化

C用宏进行非单调化,c,function,macros,stringification,C,Function,Macros,Stringification,是否有任何方法可以取消作为宏参数提供的字符串的字符串的字符串格式?我需要能够调用名字在字符串中的函数。大概是这样的: void hello() { printf("Hello, world!"); } call_func("hello"); 如何实现call_func。它将位于一个模块中,该模块将是#included,并将用于调用主c文件中的函数。如果有另一种方法可以做到这一点,即名称不必是字符串,但可以作为参数传递给一个函数,该函数可以接受。这就是我的意思: #define cal

是否有任何方法可以取消作为宏参数提供的字符串的字符串的字符串格式?我需要能够调用名字在字符串中的函数。大概是这样的:

void hello() {
    printf("Hello, world!");
}

call_func("hello");
如何实现call_func。它将位于一个模块中,该模块将是
#include
d,并将用于调用主c文件中的函数。如果有另一种方法可以做到这一点,即名称不必是字符串,但可以作为参数传递给一个函数,该函数可以接受。这就是我的意思:

#define call_func(X) X()
void do_something(Some_kind_of_C_func_type i) {
    call_func(i)
}
void hello() {
    printf("Hello, world!");
}

do_something(C_FUNC(hello));

好的,我认为有两种方法可以做到这一点,这取决于你的目标是什么

首先是函数指针;本质上将函数视为变量。有关快速概述,请参阅


或者,您可以将希望以这种方式调用的代码构建为一个共享库,然后使用dlopen()或LoadLibrary()之类的东西打开库,然后使用任一接口访问变量/函数。

尽管您不完全清楚要实现什么,不能使用宏获取在运行时输入的字符串并解析同名函数

您可以做的是,在一个列表(或稍微复杂的数据结构)中注册所有函数,并按其名称调用它们

#define INSERT(fn) addfn(#fn, &fn)
void addfn(char const* name, func_t fp);
其中,
addfn
可以获取发出的指针,并将其放在条目
name

下的字典中,在适当的句柄上使用即可。我相信,你需要使用它来获得适当的控制。但你的基本观点——你不能简单地(无论是使用宏还是任何其他技术)就这么做,这是正确的。