Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ define/macro返回指向同一文件中给定函数的函数指针_C++_C_Function Pointers - Fatal编程技术网

C++ define/macro返回指向同一文件中给定函数的函数指针

C++ define/macro返回指向同一文件中给定函数的函数指针,c++,c,function-pointers,C++,C,Function Pointers,说我有密码 void 1funct() { (...) } void 2funct() { (...) } etc., to void nfunct() { (...) } 是否可以将函数指针返回到给定n的正确函数 定义RET_FUNC_POINTERn&nfunct 是-宏可以使用以下命令将源代码字符连接到单个标记中: 标记是源代码的不可见构建块,是解析器在试图理解程序时从代码生成的离散文本单元。它们大体上类似于英语中的单词,但是它们不需要在C++中被空间分隔,除非省略空间只产生单个令

说我有密码

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

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

void nfunct() {
(...)
}
是否可以将函数指针返回到给定n的正确函数


定义RET_FUNC_POINTERn&nfunct

是-宏可以使用以下命令将源代码字符连接到单个标记中:

标记是源代码的不可见构建块,是解析器在试图理解程序时从代码生成的离散文本单元。它们大体上类似于英语中的单词,但是它们不需要在C++中被空间分隔,除非省略空间只产生单个令牌:例如int main vs int,但int *vs. int。使用,我们可以使用两个可能的标记int和main,并使用预处理器将它们强制转换为intmain。只是,其中一个参数是宏的变量。请注意,您不需要连接&和n funct部分,因为&已经是一个单独的标记,并且应该保持这种方式

但是,您可能希望考虑一个很好的指针数组。 如果在编译时静态地知道n,而宏必须在编译时才能工作,那么除了混淆代码之外,仅仅编写&1funct、&2funct等并没有什么好处


还要注意,函数名不能以数字开头;您必须选择不同的命名方案。

是-宏可以使用以下方法将源代码字符连接到单个标记中:

标记是源代码的不可见构建块,是解析器在试图理解程序时从代码生成的离散文本单元。它们大体上类似于英语中的单词,但是它们不需要在C++中被空间分隔,除非省略空间只产生单个令牌:例如int main vs int,但int *vs. int。使用,我们可以使用两个可能的标记int和main,并使用预处理器将它们强制转换为intmain。只是,其中一个参数是宏的变量。请注意,您不需要连接&和n funct部分,因为&已经是一个单独的标记,并且应该保持这种方式

但是,您可能希望考虑一个很好的指针数组。 如果在编译时静态地知道n,而宏必须在编译时才能工作,那么除了混淆代码之外,仅仅编写&1funct、&2funct等并没有什么好处


还要注意,函数名不能以数字开头;您必须选择不同的命名方案。

不确定为什么要这样做,而不只是使用常量数组,但使用宏很容易:

#define RET_FUNC_POINTER(n) (n##funct)

不确定为什么要这样做,而不只是使用常量数组,但使用宏很容易:

#define RET_FUNC_POINTER(n) (n##funct)

函数名不能以数字开头,是吗?两个答案同时发布,都独立地说使用一个数组——就是这样。如果我们忽略标识符不能以数字开头,你可以这样做;请看下面的答案,但我怀疑它是否能给你任何帮助。宏参数必须在预处理时为常量;所以它不可能是一个变量,等等。如果这个数字是常量,那么可以直接编写&nfunct。正如其他人所说,您可能需要一个函数指针数组。可以做一些类似于_nfunt的事情来规避标识符命名规则。带有前导下划线的名称虽然不是普遍禁止的,但通常是个坏主意。函数名不能以数字开头,是吗?同时发布两个答案,两者都使用一个数组——就是这样。如果我们忽略标识符不能以数字开头,你可以这样做;请看下面的答案,但我怀疑它是否能给你任何帮助。宏参数必须在预处理时为常量;所以它不可能是一个变量,等等。如果这个数字是常量,那么可以直接编写&nfunct。正如其他人所说,您可能需要一个函数指针数组。可以执行类似于_nfunct的操作来规避标识符命名规则。带有前导下划线的名称虽然不是普遍禁止的,但通常是一个坏主意。如果n是存储在变量中的字符指针,例如char*v=1而不是整数值,是否可以这样做,如果不是,我必须进行哪些调整才能实现这一点?如果n是存储在变量中的字符指针,比如说char*v=1而不是整数值,是否可能实现这一点?如果不是,我必须进行哪些调整才能实现这一点?