gpt4 book ai didi

c - 了解 C 中的嵌套宏语法

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:01 28 4
gpt4 key购买 nike

我正在尝试理解 C 中的宏,需要一些帮助。我是编码的新手,非常感谢任何有助于理解的帮助。

  1. C 中宏定义的语法是否取决于您的编译器,或者是否有任何不是特定于编译器的 C 标准定义?
  2. 宏是由 C 预处理 (CPP) 执行的,对吗? http://tigcc.ticalc.org/doc/cpp.html
  3. 您可以根据您设置的构建环境添加宏定义吗?

  4. 我试图理解这段代码,但我有点困惑。所以 第一行代码设置了一个函数宏 CAT,它连接 a 和 b 对吗?

    第二行只是创建了一个函数 QTE,它接收一个名称,但我不太确定单个散列在宏中的作用...?

    第三行我不确定,因为我从未见过以另一个函数作为其定义的函数。是吗连接 s_ 和 generic 然后将该值作为输入函数然后使用该函数作为替代选择(通用)?

    在第四行class中,_和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) ;

最佳答案

将评论转化为答案。

  1. 宏的基本语法是所有编译器的标准。

  2. 宏可以由单独的 C 预处理器程序(传统上称为 cpp)解释,或者作为主编译器的集成部分。如今,出于各种复杂的原因,编译器通常使用集成预处理器而不是独立预处理器。

  3. 是。

  4. 多个部分:

    • 哈希运算符将参数转换为字符串。
    • SEL 宏在作为参数传递的符号前加上 s_
    • export 中的_ 只是一个“字母”; class 是一个C++关键字,但在这里用作参数名称(预处理器运行时没有关键字)。
    • 我们不知道 classMethod() 做了什么,但它被赋予了一系列修改过的参数。

给定:

export(Aaa, Bbb, Ccc)

您从以下位置获得输出:

classMethod(Aaa, s_Bbb, _Bbb, Ccc);

export宏定义中添加的分号有点可疑;通常,您会调用:

export(Aaa, Bbb, Ccc);   // Semicolon after invocation

并且在宏定义中不包含分号。

关于c - 了解 C 中的嵌套宏语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45760732/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com