宏传递了 2 个参数,但只需要 1 个
Posted
技术标签:
【中文标题】宏传递了 2 个参数,但只需要 1 个【英文标题】:macro passed 2 arguments, but takes just 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 宏。 【参考方案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/…以上是关于宏传递了 2 个参数,但只需要 1 个的主要内容,如果未能解决你的问题,请参考以下文章
宏 MOCK_METHOD 传递了 3 个参数,但 std::pair 仅出现 2 个错误