C 如果在运行时变量的名称在字符串中,如何获取变量的地址?

C 如果在运行时变量的名称在字符串中,如何获取变量的地址?,c,C,我期待着像下面这样的事情 int genVar001, genVar002, genVar003; int adrgenVar, status; char strvariable[] = "genVar001"; status = somefunction(&strvariable, adrgenVar); 其中“adrgenVar”的地址为genVar001。!如果变量不可用,状态应返回错误 为什么需要:用于通过键盘或文件在运行时操纵值 查找表不会帮助我,因为它会增加工作;如果添

我期待着像下面这样的事情

int genVar001, genVar002, genVar003;
int adrgenVar, status;
char strvariable[] =  "genVar001";

status = somefunction(&strvariable, adrgenVar);
其中“adrgenVar”的地址为genVar001。!如果变量不可用,状态应返回错误

为什么需要:用于通过键盘或文件在运行时操纵值

查找表不会帮助我,因为它会增加工作;如果添加了任何新内容,请维护该表

编辑: 我正在使用PLC,这是一个允许我这样做的库。
功能:PV_xgetadr。

C标准中没有任何类型的自省功能,无法以便携方式实现您的目标。使用可执行文件的调试信息或符号表等不可移植的方式将是一个糟糕的想法

但这并不意味着没有解决办法。根据变量名判断,您应该做的是:

int genVar[3];

然后,您可以在运行时动态索引到该数组中。如果这不够灵活,请使用链表或哈希映射-标准中有很多C语言的实现,但没有一个可用。

有关如何在C语言中实现字典的一些答案,请参阅。如果您不知道,字典通常有一个键列表和相关值。我发现它非常适合在运行时使用字符串标识符修改变量。C没有任何像这样的内置内省函数。无法从名称中找到变量。你知道int不能保证能保存地址吗?@Barmar:当然,如果符号表没有被剥离,你可以编写代码解析符号表,并以某种方式找到变量。但是你也可以在马拉松之前射出你的脚。C语言中没有任何东西允许这样做。您必须使用特定于平台的代码。