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

有没有一个通用的重构来把一个C宏变成一个函数?

  •  0
  • thoni56  · 技术社区  · 5 年前

    我要复活一个 old project ,实际上是第一个跨 Refactoring Rubicon .

    我们已经确定,由于宏在语义上比C函数丰富得多,因此没有通用的转换方法 函数的宏。但宏通常只是直接的顺序C代码,出于某种原因被实现为宏。

    在这种情况下,主要是将宏参数转换为函数参数语义。

    我希望有人能有一个想法,或方法,或指针,对一些事情是一个有点一般模式如何做到这一点。如果它创建了很多额外的间接寻址,那就好了,一旦我把它放到一个函数中,我就可以模拟它并重构成一个更简单的形式。

    #define GetChar(cch, ccc, ffin, bbb) {                              \
        if (ccc >= ffin) {                                              \
            (bbb)->next = ccc;                                          \
            if ((bbb)->isAtEOF || getCharBuf(bbb) == 0) {               \
                cch = -1;                                               \
                (bbb)->isAtEOF = true;                                  \
                goto endOfFile;                                         \
            } else {                                                    \
                ccc = (bbb)->next; ffin = (bbb)->end;                   \
                cch = * ((unsigned char*)ccc); ccc ++;                  \
            }                                                           \
        } else {                                                        \
            cch = * ((unsigned char*)ccc); ccc++;                       \
        }                                                               \
    }
    

    char *fn;
    char *ccc;
    char *ffin;
    CharacterBuffer *iBuf;
    
    GetChar(fn[i],ccc,ffin,iBuf);
    

    (是的,我知道,我在执行救援任务,对吧……)

    0 回复  |  直到 5 年前