#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"
。GCC的cpp preprocessor上有很好的文档。阅读有关stringification(具有单个
#
,例如#x;
宏的结尾OPCODE
)和有关concatenation(具有双重##
,例如(0x##y)
宏的OPCODE
)的信息。关于c++ - 有人可以解释这小段C++代码,但我无法说清楚,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19217939/