我正在尝试将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宏文档:
“宏的所有参数在被替换为宏主体之前,都已完全进行宏扩展。替换后,将再次扫描全文以查找宏以扩展宏,包括参数。”
您必须确保您的组合再次MACRO(BLACK)评估BLACK零件。否则,它不会“看到”逗号分隔零。您可以将现有名称重命名MACRO为MACRO3(它会收到3个参数),然后
#define MACRO(...) MACRO3(__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)