我有下面的宏打印出整数数组的内容用于调试目的:在C宏模拟范围
#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");
我遇到的问题是,当我使用它不止一次,有些更编译器抱怨我正在重新定义ai
。
有没有一种方法,使对宏的每次调用标识不同?我可以想出一个名称冲突变化非常小的命名方案,但我想使其自动化。
我知道我可以使用一个函数,但我仍然好奇,因为我想知道是否有一种方法可以用宏来实现。
'做{...}而(0)'应该多语句宏中使用,请参阅http://stackoverflow.com/a/1067238/146041 –
你应该总是用做..(0)使用宏时。 – this