макрос передал 2 аргумента, но принимает только 1

мой код не был успешно собран с этим сообщением об ошибке:

macro "hton_us" passed 2 arguments, but takes just 1

и это происходит в этой строке:

hton_us( &fi.size, 1 );

вот ссылка на hton_us

void hton_us( iu16 *us, iu8 num )
{
iu16 local;

while( num-- ) {
local=*us;
*us++=swap_us(local);
}
}

Я прочитал в некотором подобном вопросе, который сказал использовать typedef но это не помогло мне.

1

Решение

Используя небольшой трюк препроцессора C, вы можете пропустить макрос и просто вызвать функцию:

(hton_us)(&fi.size, 1);

Окружающими hton_us в скобках он говорит компилятору, что этот макрос не может быть раскрыт, потому что он не был вызван ни с одним аргументом, и, следовательно, функция вызывается вместо этого.

4

Другие решения

Проверьте ваши заголовочные файлы, у вас, вероятно, есть следующее:

#ifndef ENDIAN_LITTLE
#define hton_us(us)
#define hton_ul(ul)
#endif

так что, вероятно, ENDIAN_LITTLE не определен

3