【发布时间】:2014-01-29 09:43:07
【问题描述】:
我有这个功能:
void hex_display(void const *v_ptr, int num)
{
uchar const *ptr = v_ptr;
int i;
for (i=0; i<num; i++)
{
if(i != 0)
{
if(((i%4) == 0) && ((i%16) != 0))
{
fprintf(fp, "\t");
}
if((i%16) == 0)
fprintf(fp, "\n");
fprintf(fp, "%02x", ptr[i]);
}
else
fprintf(fp, "%02x", ptr[i]);
}
fprintf(fp, "\n");
}
我将其转换成如下宏:
#define hex_display(v_ptr, num)\
{\
uchar const *ptr = v_ptr;\
int i;\
for (i=0; i<num; i++)\
{\
if(i != 0)\
{\
if(((i%4) == 0) && ((i%16) != 0))\
{\
fprintf(fp, "\t");\
}\
if((i%16) == 0)\
fprintf(fp, "\n");\
fprintf(fp, "%02x", ptr[i]);\
}\
else\
fprintf(fp, "%02x", ptr[i]);\
}\
fprintf(fp, "\n");\
}
我还有另一个宏 print_struct:
#define print_struct(str) hex_display((str), sizeof(*(str)))
即,每当我调用 print_struct 时,它都会在内部调用 hex_display。每次,它都会给我这个警告:
警告:从不兼容的指针类型初始化[由 默认]
我做错了什么?如何删除此警告?
【问题讨论】:
-
这没有任何意义。函数的宏形式实际上命名为
print_mem(),但你打错了吗? -
答案解释了您在定义宏时出错的地方,但恕我直言,您的主要错误是从一开始就将其设为宏 :-) 为什么您希望它成为宏?
-
仍然从您的最后一个问题(编号 21326738)将您的函数转换为宏对我来说没有任何意义。只是不要这样做。它什么也没给你带来,也没有任何性能提升,只会混淆你的代码。真的,不要。
-
uchar const *ptr = (void *)v_ptr;\
标签: c pointers recursion macros