【发布时间】:2013-10-13 14:51:37
【问题描述】:
#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++,但是在查看代码时很难知道到底发生了什么。如何最有效地学习语法和规则?
【问题讨论】:
-
函数返回一个字符串。这就是
const char*的意思。在这种情况下,它们是字符串文字。 -
查看 C 或 C++ 中的 宏 是什么。
-
我认为字符串连接需要
+符号?return "OP_" #x;如何返回字符串? -
这是给
std::string的。在这种情况下,#用于预处理器。所以OPCODE("foo", 1234)变成if((0x1234==op) return "OP_foo" -
@bvpx String literals 如果它们紧随其后,则将它们连接起来 -
"abc_" "def"在编译期间变为"abc_def"。
标签: c++ function pointers syntax