【问题标题】:macro passed 2 arguments, but takes just 1宏传递了 2 个参数,但只需要 1 个
【发布时间】:2012-10-18 12:06:50
【问题描述】:

我的代码没有成功构建并出现此错误消息:

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,但它对我没有帮助。

【问题讨论】:

  • 会不会存在与你的函数同名的预处理宏?
  • 抱怨除了你的实现之外你已经有一个 hton_us 宏。

标签: c++ compiler-construction compiler-errors avr-gcc


【解决方案1】:

使用一点 C 预处理器技巧,您可以跳过宏,直接调用函数:

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

通过将hton_us 括在括号中,它告诉编译器这个宏不能被扩展,因为它没有用任何参数调用,因此函数被调用了。

【讨论】:

  • marcin_j 答案工作正常。你有什么意见哪个更好?
【解决方案2】:

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

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

所以可能没有定义 ENDIAN_LITTLE

【讨论】:

  • 我使用#define ENDIAN_LITTLE;,它工作正常。你认为你的解决方案比理查德的回答更好吗?
  • 实际上你不应该自己定义这个宏,而是使用一些编译器定义来决定应该使用什么字节顺序。我不知道任何标准方法,我只在谷歌上找到了类似的方法:androidxref.com/2.2.3/xref/external/dropbear/libtomcrypt/src/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-14
  • 2011-07-06
  • 1970-01-01
  • 2022-01-18
  • 2021-07-23
  • 1970-01-01
  • 2018-07-13
相关资源
最近更新 更多