#definemacro返回一个函数指针,指向同一文件中的函数。

问题描述 投票:0回答:2

假设我有代码

void 1funct() {
(...)
}

void 2funct() {
(...)
}
etc., to 

void nfunct() {
(...)
}

能否通过以下方式返回给定n的正确函数指针?

#define RET_FUNC_POINTER(n) (&nfunct); ?

c++ c function-pointers
2个回答
2
投票

是的--宏可以将源代码的字符用 ##:

#define RET_FUNC_POINTER(n) (&n ## funct);

(标记是你的源代码中看不见的 "构件",是解析器在试图理解你的程序时从你的代码中生成的离散文本单位。它们大致类似于英语中的 "单词",但在C++中,它们不需要用空格隔开,除非省略一个空格就会产生一个单一的标记:例如 int main vs intmainint *int*. 随着 ## 我们可以把这两块令牌拿去。intmain,并使用预处理程序将它们强制到 intmain 而不是。只是,你的一个参数是宏的 "变量"。注意,你不需要加入 &n ## funct 部分,因为 & 已经是一个独立的标记,应该保持这种方式)。)

然而,你可能希望考虑用一个漂亮的指针数组来代替。

如果 n 是在编译时静态已知的(你的宏必须是这样的),那么你并没有真正获得任何东西,而只是写了 &1funct, &2funct 等,而不是混淆你的代码(这并不是一个收益)。

另外注意,你的函数名不能以数字开头,你必须选择不同的命名方案。


1
投票

不知道你为什么要这样做(而不是只用一个 const 数组),但用宏就很容易做到。

#define RET_FUNC_POINTER(n) (n##funct)
© www.soinside.com 2019 - 2024. All rights reserved.