在实际编译开始之前处理宏。它们只是预处理器应该如何编辑文本(代码)的规则。
CMD_MAP(foo)
扩展foo(READ, NETFN_SE, 0x01, 1) foo(WRITE, NETFN_SE, 0x02, 8)
为然后编译。
反斜杠只是告诉预处理器宏在下一行继续。
/编辑:宏是用“c”而不是“k”写的,就像在德国一样;)
/Edit2:基本宏功能指南
makro 的基本语法是这样的:
#define MAKRO_NAME(argument1, argument2, ...) <definition of replacement-text>
举个简单的例子:
#define GET_A(val) val.a
这背后的原理是,当“调用”宏时,'val.a' 中的 val 会被你放在括号内的任何内容替换。因此,如果我在代码中编写以下内容:int x = GET_A(someObject);
它将被扩展(预编译)为:int x = someObject.a;
以及以下内容:
#define GET_SOMEVAL(obj, val) obj.val
//...
int x = GET_SOMEVAL(myObject, myVal);
将扩展为:int x = myObject.myVal;
如您所见,这些只是基于文本的替换,预处理器对 C++ 的语法或句法一无所知。宏不必对函数调用或其他任何事情做任何事情,它们只是通过替换文本来工作。宏中有更多(黑暗)魔法,但这应该可以做到。
回到您的问题:预处理器只是用您在编写时放入括号内的任何内容替换“F”CMD_MAP(this here replaces F)