我想生成多个类似的函数,在整个函数中仅替换一个单词。

例如,对于以下每个方面:

OBJECT = customer
OBJECT = account

使用功能模板:
void add_OBJECT_to_array(void* item_ptr, int pos)
{
    mtx_lock(&OBJECT_array_mtx);
    OBJECT_array[pos] = *(OBJECT_t*)item_ptr;
    mtx_unlock(&OBJECT_array_mtx);
    return;
}

这样我就可以打电话
add_order_to_array(ord, 1);
add_customer_to_array(cust, 1);

这可能吗?

最佳答案

完全有可能。您只需要了解预处理程序串联运算符##即可。以下代码将生成两个函数add_order_to_arrayadd_customer_to_array

#define GENERATE_FUNC(OBJECT) \
    void add_ ## OBJECT ## _to_array(void* item_ptr, int pos)\
    {                                                        \
        mtx_lock(&OBJECT ## _array_mtx);                     \
        OBJECT ## _array[pos] = *(OBJECT ## _t*)item_ptr;    \
        mtx_unlock(&OBJECT ## _array_mtx);                   \
        return;                                              \
    }

GENERATE_FUNC(order)
GENERATE_FUNC(customer)

预处理器的输出将是(不幸的是,它不遵守格式):
void add_order_to_array(void* item_ptr, int pos) { mtx_lock(&order_array_mtx); order_array[pos] = *(order_t*)item_ptr; mtx_unlock(&order_array_mtx); return; }
void add_customer_to_array(void* item_ptr, int pos) { mtx_lock(&customer_array_mtx); customer_array[pos] = *(customer_t*)item_ptr; mtx_unlock(&customer_array_mtx); return; }

关于c - 使用C预处理器生成多个相似的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56365654/

10-12 00:20
查看更多