一个宏定义的问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 02:51:20
#define EMIFA_FMKS(REG,FIELD,SYM)_PER_FMKS(EMIFA,##REG,##FIELD,##SYM)
这个宏定义好像是用一个define定义了两个带参数的宏,他们之间什么关系呢。还是我理解的不对?谁能给解释下?

"#" 代表和一个字符串相连接

"##" 代表和一个符号连接,符号可以是变量,或另一个宏符号。

举例如下:

宏定义如下

(1)

#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);
OPEN_FILE(fd2, 2);
OPEN_FILE(fd3, 3);
OPEN_FILE(fd4, 4);
OPEN_FILE(fd5, 5);
OPEN_FILE(fd6, 6);

用gcc -E展开后,如下

2299: { fd1 = open("/dev/test_kft" "1",00); if(fd1 < 0) { printf("Open device error\n"); return 0; } };
2300: { fd2 = open("/dev/test_kft" "2",00); if(fd2 < 0) { printf("Open device error\n"); return 0; } };
2301: { fd3 = open("/dev/test_kft" "