老程序员教我的编程技巧-续集

8. 用宏定义来打印数组

  有时候,我们需要显示一个是数组的全部元素,可是每次都写一遍循环太麻烦了,就可以用宏定义来简化这个过程。那,为什么不能写成函数呢?因为用函数打印数组时,需要传递两个参数:数组和数组个数。而宏只需要传一个数组就行了。下面是示例代码:

 1 #include <cstdio>
 2 using namespace std;
 3 
 4 #define CountOfArray(ar) sizeof(ar)/sizeof(ar[0])
 5 #define PRN(ar)                                 \
 6     {                                           \
 7         printf ("----\r\n");                    \
 8         int N = CountOfArray(ar);               \
 9         for (int i=0; i<N; i++)                 \
10             printf ("[%d]:%d \n", i, ar[i]);    \
11         printf ("-- total : %d --\r\n", N);     \
12     }
13 
14 int prn(int ar[],int N){
15     printf ("----\r\n");
16  
17         for (int i=0; i<N; i++)
18             printf ("[%d]:%d \n", i, ar[i]);
19         printf ("-- total : %d --\r\n", N);
20 }
21 
22 int main() {
23     int sz=17;
24     int a[sz] = {1,2,3,4,5,6,7,8,9};
25     PRN(a);
26     prn(a,sz);
27     return 0;
28 }

注意:第4行是一个求出数组个数的宏。