首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按宏传递宏参数

按宏传递宏参数
EN

Stack Overflow用户
提问于 2015-12-18 13:31:17
回答 2查看 2.5K关注 0票数 6

我试图将一个RGB颜色传递到一个包含三个参数的宏中。通常的调用如下所示:MACRO(255, 255, 255)宏转换参数,然后与操作符一起将其通过SPI发送到图形控制器。C代码中的调用如下所示:cmd(MACRO(0,0,0));

由于颜色在多个场合使用,但可能会发生变化,我认为通过另一个宏来定义它可能是个好主意。因此,定义颜色(例如#define BLACK 0,0,0 )并将其插入另一个宏应该是可以的:MACRO( BLACK )、->、cmd(MACRO( BLACK ));,但是编译器输出一个错误:

宏“宏”需要三个参数,但只有一个给定

要做到这一点,我假设提供参数的宏没有被扩展。我试着从gcc的宏观文档中找出错误的地方,但却无法理解。我想这是一件愚蠢的简单的事情.谢谢!

更多信息:有多个宏由一个以三个数字(rgb)作为参数的驱动程序提供。我想定义一个配色方案,使它能够在不超过这三个数字的情况下改变颜色。

插入宏的函数需要一个无符号的长,这就是宏正在产生的结果。

为什么黑色一词不是简单地被0,0,0代替?

引用gcc宏观文献:

宏的所有参数在被替换为宏体之前都是完全展开的。替换后,将再次扫描完整的文本,以便宏展开,包括参数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-18 14:37:17

您必须确保组合MACRO(BLACK)再次评估BLACK部件。否则,它不会“看到”分隔零的逗号。您可以将现有的MACRO重命名为MACRO3 (它接收3个参数),然后具有

代码语言:javascript
运行
复制
#define MACRO(...) MACRO3(__VA_ARGS__)
票数 8
EN

Stack Overflow用户

发布于 2015-12-18 13:49:43

您可能需要像这样定义宏:

代码语言:javascript
运行
复制
#define MACRO(x, y, z) somestuffhere
#define BLACK MACRO(0,0,0)

然后就这样叫它

代码语言:javascript
运行
复制
cmd(BLACK);

这是一个更符合逻辑的实现。如果您定义了一个接受3个参数的宏,那么它应该使用3个参数,而不是一个。但是,您可以在另一个宏定义中调用宏。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34356877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档