我有以下宏来打印出一个整数数组的内容用于调试目的:
#define PRINT_ARRAY(ary, num) \
int ai = 0; \
printf("{"); \
for(ai=0; ai < num; ++ai) { \
printf("%d", ary[ai]); \
if(ai < num-1) printf(", "); \
} \
printf("}\n");
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我不止一次使用它时,一些编译器抱怨我正在重新定义ai.
有没有办法使宏标识符的每次调用都不同?我可以提出一个名称冲突变化非常小的命名方案,但我想让它自动化.
我知道我可以使用一个函数,但我仍然很好奇,因为我想知道是否有办法用宏来做这个.
小智 6
你为什么不使用经典的do-while技巧?例如:
#define FOO(EXPR) \
do { \
(EXPR); \
} while(0)
Run Code Online (Sandbox Code Playgroud)