我正在尝试将RGB颜色传递到带有三个参数的宏中。
普通电话会是这样的:MACRO(255, 255, 255)
宏转换参数并与操作符一起,然后通过SPI将其发送到图形控制器。 C代码中的调用如下所示:cmd(MACRO(0,0,0));
由于颜色在多个场合使用,但可能会有变化,我认为通过另一个宏定义它可能是个好主意。
所以定义颜色,例如#define BLACK 0,0,0
并将其插入另一个宏应该没问题:MACRO( BLACK )
- > cmd(MACRO( BLACK ));
但编译器输出错误:
宏“MACRO”需要3个参数,但只有1个
得到这个我假设提供参数的宏没有被扩展。我试图找出通过gcc宏文档读取的错误,但无法单独使用它。我认为这是一个愚蠢的简单事情...... 谢谢!
更多信息: 驱动程序提供了多个宏,它们将三个数字(rgb)作为参数。我想定义一个颜色方案,以便能够在不改变这三个数字的情况下更改每次出现的颜色。
插入宏的函数采用无符号长整数,这就是宏生成的函数。
为什么BLACK这个术语不能简单地用0,0,0代替?
来自gcc宏文档的引用:
“宏的所有参数在被替换为宏体之前都是完全宏扩展的。替换之后,再次扫描完整的文本以扩展宏,包括参数。”
答案 0 :(得分:3)
您必须确保您的组合MACRO(BLACK)
再次评估BLACK
部分。否则它不会“看到”分隔零的逗号。您可以将现有的MACRO
重命名为MACRO3
(它接收3个参数),然后
#define MACRO(...) MACRO3(__VA_ARGS__)
答案 1 :(得分:2)
您可能希望像这样定义宏:
'https://www.googleapis.com/youtube/v3/search?part=snippet&q=' + query + '&key={My_key}'
然后像那样称呼它
#define MACRO(x, y, z) somestuffhere
#define BLACK MACRO(0,0,0)
这是一个更合乎逻辑的实现。如果定义一个带有3个参数的宏,则应该使用3个参数而不是1个参数。但是,您可以在另一个宏定义中调用宏。