мой код не был успешно собран с этим сообщением об ошибке:
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
но это не помогло мне.
Используя небольшой трюк препроцессора C, вы можете пропустить макрос и просто вызвать функцию:
(hton_us)(&fi.size, 1);
Окружающими hton_us
в скобках он говорит компилятору, что этот макрос не может быть раскрыт, потому что он не был вызван ни с одним аргументом, и, следовательно, функция вызывается вместо этого.
Проверьте ваши заголовочные файлы, у вас, вероятно, есть следующее:
#ifndef ENDIAN_LITTLE
#define hton_us(us)
#define hton_ul(ul)
#endif
так что, вероятно, ENDIAN_LITTLE не определен