Я имел эту функцию:Macro вопросов, требующих после преобразования функции к Macro
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()', но вы неправильно набрали? – unwind
Отредактировано. Была опечатка. – aod
Ответы объясняют, где вы ошибались в определении макроса, но ИМХО ваша главная ошибка заключалась в том, чтобы сделать макрос для начала :-) Почему вы хотите, чтобы это был макрос? – delnan