使用宏来减少代码重复

reduce code duplication using macros

本文关键字:代码      更新时间:2023-10-16

我想知道是否有人可以给我一个指针,以减少编码时的重复。

im需要多次调用功能以填充结构,例如:

typedef struct {
    uint16_t u16_a;
    bool b_org;
    char* c_c;
    uint16_t u16_d;
} TEntry;

我需要用函数调用填充这些值的每个值,尽管返回值有所不同,但所有函数都用于所有函数。宏是否足以以某种方式创建模板,因此返回类型将取决于特定参数(" String")

例如:

Trrelevant::Trrelevant()
{
    TPoint* u_apoint = Insufficient::FindValue("A");
    if (u_bpoint != NULL) {
        int a = u_apoint;
    }
    TPoint* p_apoint = Insufficient::FindValue("borg");
    if (p_bpoint != NULL) {
        bool b = p_bpoint;
    }

    TPoint* p_cpoint = Insufficient::FindValue("C");
    if (etc != NULL) {
        char* c = etc;
    }
    TEct* etc = Insufficient::FindValue("ETC");
    if (etc != ETC) {
        etc = etc;
    }
    TEntry entry = {a,
                    b,
                    c,
                    etc};
}

此代码不是编译或准确的,我只是在试图说明。我在C 中很虚弱,对宏的新手,但是有人会知道一种解决这个问题的方法吗?

谢谢您的时间

您可以做这样的事情,尽管我不知道它真正为您买了什么。

#define QuickFindValue(NAME, TYPE, FUNCTION)             
     TYPE *NAME##Value = Insufficient::FindValue(#NAME); 
     if (NAME##Value == NULL) { FUNCTION; }

您会这样使用它:

QuickFindValue(C, TPoint, { 
  char *c = CValue;
  // Do stuff..
});

最近我遇到了同样的问题,我不确定您在输入中使用哪种来源。人格,我使用XML作为输入。然后,我有一个解析XML的构建器类,可以使用Parser中的数据来调用Factory Funciton,以在C 中构建每个结构。

我认为宏观或模板不会有任何帮助(或者这是一个不好的解决方案)。请注意,如果您想更改而不进行重新编译,则外部资源(例如XML)都是不错的。

最佳