预处理器宏重用相同的内存

时间:2019-03-10 19:22:48

标签: c gcc

我的宏定义如下:

#define MAP_ACTUAL(input) do {\
    char testPath[256];\
    getcwd(testPath, sizeof(testPath));\
    strcat(testPath, "/actual");\
    strcat(testPath, input);\
    input = testPath;\
} while(0)

当我使用它一次时,它可以按预期工作。当我在相同的函数中两次使用它时:

static int do_rename(const char *from, const char *to) {
    printf("[rename] %s -> %s\n", from, to);
    MAP_ACTUAL(from);
    MAP_ACTUAL(to);
    // rest of the function
}

fromto指向相同的地址,我猜到testPath,导致它们都具有相同的值(无用)。我的印象是,由于宏是在do while范围内定义的,因此应使用单独的地址。我该如何解决?

我正在使用gcc 8.2.1。

0 个答案:

没有答案