有人可以解释一下这段简短的 C++ 代码吗,我无法理解它

2023-12-07

#include <opcodes.h>
const char *getOpcodeName(
    uint8_t op
)
{
    #define OPCODE(x, y) if((0x##y)==op) return "OP_" #x;
        OPCODES
    #undef OPCODE
    return "OP_UNKNOWN";
}

代码链接在这里:https://github.com/znort987/blockparser/blob/master/opcodes.cpp

这是包含的链接操作码.h

我知道这只是一个格式奇怪的函数,但是,我想知道到底是什么*函数名开头的意思是。我认为这与指针有关?

另外,情况如何#undef and #define陈述有效吗?两者后面都没有分号,其中之一似乎被定义为单行函数。什么是(0x##y)意思是?什么是return "OP_" #x意思是?我以前从未遇到过这样的语法。

我想更认真地学习 C++,但是在查看代码时很难判断到底发生了什么。如何最有效地学习语法和规则?


通过运行您的代码C++ 预处理器,例如使用g++ -Wall -C -E opcodes.cpp > opcodes.i然后查看生成的内部opcodes.i

#define不是一个声明,而是一个预处理指令.

宏观OPCODES被扩展到一些大块,特别是包含OPCODE( NOP, 61)这会扩展到类似的东西

if ((0x61)==op) return "OP_" "NOP";

两个字符串文字连接成一个,"OP_NOP" here.

GCC 有一个很好的文档cpp预处理器。阅读字符串化(与单#就像结局一样#x; of the OPCODE宏)和关于级联(有一个双## like (0x##y) of the OPCODE macro).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有人可以解释一下这段简短的 C++ 代码吗,我无法理解它 的相关文章

随机推荐