C语言如何在运行时拼接单词与数字为标识符实现数组索引
问题结论
你要求的这种运行时直接拼接标识符获取对应变量的需求,在标准C中无法实现。
核心原因
C语言的标识符(变量名、函数名等)属于编译期概念,预处理器的##运算符是在编译的预处理阶段完成拼接,拼接后的标识符会在后续编译流程中被替换为对应的内存地址。编译完成后的二进制程序不会保留任何标识符的字符串信息,运行时没有办法通过拼接字符串的方式匹配到对应的变量。
替代实现方案
如果要实现运行时按数字选择对应数组的效果,可以提前构造指针索引表,通过下标索引的方式实现,完全可以满足你的使用需求,示例代码如下:
#include <stdio.h> int main(){ int foo1[2][1] = {{2}, {5}}; int foo2[2][1] = {{6}, {9}}; // 构造指针数组,下标对应你要匹配的数字,数字从1开始的话可以将第0位留空 int (*foo_index[])[2][1] = {NULL, &foo1, &foo2}; // 这里a是运行时获取的数值 int a = 1; int* print_val = (*foo_index[a])[1]; printf("Value: %d\n", *print_val); return 0; }
如果是动态链接场景需要匹配符号名,可以使用系统提供的dlsym类API实现,但该方案性能较差,仅适用于特殊场景,普通业务逻辑不推荐使用。
内容的提问来源于stack exchange,提问作者mandeala
相关产品推荐
相关产品推荐

