我的宏定义如下:
#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
}
值from
和to
指向相同的地址,我猜到testPath
,导致它们都具有相同的值(无用)。我的印象是,由于宏是在do while
范围内定义的,因此应使用单独的地址。我该如何解决?
我正在使用gcc 8.2.1。