#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(使用前将#替换为@)