我正在尝试理解C中的宏并需要一些帮助。我对编码非常陌生,我很欣赏任何有关理解的帮助。
您可以根据您设置的构建环境添加宏定义吗?
我正在尝试理解这段代码,但我有点困惑。所以 第一行代码设置了一个连接的函数宏CAT a和b对吧?
第二行只是创建一个函数QTE,它接受一个 名字,但我不太确定单个哈希在宏中的作用...?
第三行我只是不确定因为我从未见过 函数与另一个函数作为其定义。是吗 连接s_和generic,然后将该值作为 输入到函数然后使用该函数作为替换 SEL(通用)?
在第四行类中,_和type未定义但是它 将替换其中包含的其他三个宏对象 第四行代码的三个函数是否正确?
#define CAT(a,b) a##b
#define QTE(name) #name
#define SEL(generic) CAT(s_,generic)
#define export(class, generic, type) classMethod(class, SEL(generic), CAT(_, generic), type) ;
答案 0 :(得分:2)
将评论转换为答案。
宏的基本语法是所有编译器的标准。
宏可以由单独的C预处理程序(传统上称为cpp
)解释,或者作为主编译器的集成部分解释。目前,由于各种复杂的原因,编译器通常使用集成的预处理器而不是独立的预处理器。
是
多个部分:
s_
。_
中的export
只是一封字母&#39 ;; class
是一个C ++关键字,但在此处用作参数名称(预处理器运行时没有关键字)。classMethod()
做了什么,但会给出一系列修改后的参数。假设:
export(Aaa, Bbb, Ccc)
你得到的输出是:
classMethod(Aaa, s_Bbb, _Bbb, Ccc);
export
的宏定义中添加的分号有点可疑;通常,你要调用:
export(Aaa, Bbb, Ccc); // Semicolon after invocation
并且在宏定义中不包含分号。