笔者最近开发的项目中,经常要打印一些地址信息。而开发的软件既要在32位的cpu上运行,还要在64位CPU上运行。之前做的很笨,为了兼容,每次遇到需要打印的地方,就得用宏区分开,写两句打印,很是麻烦。eg:
#if ( CPU == IA32)
printf("The address of var is %08x/n", &var);
#else if(CPU == IA64)
printf("The address of var is %016x/n",&var);
#endif
每次都这么弄,被弄烦了,就想偷懒,把这两句统一成一句。到处找资料,总算搞定:用*来完成动态指定字符宽度。代码如下:
printf("The address of var is %0*x/n",2*sizeof(void *), &var);
在32位机和64机上,2*sizeof(void *)的值分别是8和16,0后面的*分别被替代为8和16。实现了大一统。