宏中:
#: 字符串
##: 符号
所以
redisAssert(name);
展开后相当于
"name";
再看个例子:
#define DEV_FILE_NAME "/dev/test_kft"
#define OPEN_FILE(fd, n) \
{ \
fd = open(DEV_FILE_NAME #n,O_RDONLY); \
if(fd < 0) \
{ \
printf("Open device error\n"); \
return 0; \
} \
}
OPEN_FILE(fd1, 1);展开后便成为:
{ fd1 = open("/dev/test_kft" "1",00); if(fd1 < 0) { printf("Open device error\n"); return 0; } };
其中"/dev/test_kft" "1"为隐式字符串连接,在预处理阶段会转化为"/dev/test_kft1";
如果要显式连接:
char part1[] = "/dev/test_kft";
char part2[] = "1";
char path[strlen(part1) + strlen(part2) + 1];
strcpy(path, part1);
strcat(path, part2);