宏传递了 2 个参数,但只需要 1 个

问题描述 投票:0回答:2

我的代码未成功构建,并出现以下错误消息:

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++ compiler-errors avr-gcc
2个回答
4
投票

使用一些 C 预处理器技巧,您可以跳过宏并仅调用函数:

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

通过将

hton_us
括在括号中,它告诉编译器该宏无法扩展,因为它没有使用任何参数调用,因此该函数被调用。


3
投票

检查你的头文件,你可能有以下内容:

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

所以可能 ENDIAN_LITTLE 没有定义

© www.soinside.com 2019 - 2024. All rights reserved.