我试图将一个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宏观文献:
宏的所有参数在被替换为宏体之前都是完全展开的。替换后,将再次扫描完整的文本,以便宏展开,包括参数。
发布于 2015-12-18 14:37:17
您必须确保组合MACRO(BLACK)
再次评估BLACK
部件。否则,它不会“看到”分隔零的逗号。您可以将现有的MACRO
重命名为MACRO3
(它接收3个参数),然后具有
#define MACRO(...) MACRO3(__VA_ARGS__)
发布于 2015-12-18 13:49:43
您可能需要像这样定义宏:
#define MACRO(x, y, z) somestuffhere
#define BLACK MACRO(0,0,0)
然后就这样叫它
cmd(BLACK);
这是一个更符合逻辑的实现。如果您定义了一个接受3个参数的宏,那么它应该使用3个参数,而不是一个。但是,您可以在另一个宏定义中调用宏。
https://stackoverflow.com/questions/34356877
复制相似问题