gpt4 book ai didi

c++ - 有人能解释一下这段 C++ 代码吗,我看不懂

转载 作者:行者123 更新时间:2023-11-30 00:52:26 26 4
gpt4 key购买 nike

#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

这是包含的 opcodes.h 的链接

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

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

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

最佳答案

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

#define 不是语句而是 preprocessor directive .

OPCODES 被扩展为一些大块,特别是包含 OPCODE( NOP, 61) 将被扩展为类似

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

两个字符串字面量被连接成一个,"OP_NOP" here。

GCC 在其 cpp preprocessor 上有很好的文档.了解 stringification (使用单个 #,例如 OPCODE 宏的结尾 #x;)和关于 concatenation (带有双 ##,例如 OPCODE 宏的 (0x##y))。

关于c++ - 有人能解释一下这段 C++ 代码吗,我看不懂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19217939/

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