代码之家  ›  专栏  ›  技术社区  ›  None

用宏取消字符串化

  •  3
  • None  · 技术社区  · 16 年前

    是否有任何方法可以解除作为宏参数提供的字符串的绑定?我需要能够调用字符串中的函数。像这样:

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

    我将如何实现call_func。它将在一个模块中 #include 并将用于调用主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));
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   cubic1271    16 年前

    好吧,根据你的目标,我有两种方法可以做到这一点。

    首先是函数指针;本质上将函数视为变量。见 here 快速概述。

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

        2
  •  0
  •   bitmask    16 年前

    虽然还不完全清楚要完成什么,但不能使用宏获取运行时输入的字符串并解析同名函数。

    您可以做的是,在一个列表中注册所有函数(或者稍微复杂一点的数据结构),然后用它们的名字调用它们。

    #define INSERT(fn) addfn(#fn, &fn)
    void addfn(char const* name, func_t fp);
    

    在哪里? addfn 把发出的指针放到字典的条目下 name .

    推荐文章