我有一个包含几个成员的结构,我需要从文本文件初始化它们。 文本文件包含使用相同名称的结构中所有成员的值。 是否存在,遍历结构中的所有成员并将变量名称作为字符串引用以进行比较?
例如:
typedef struct pra_gen_con_file {
int num_of_tasks;
char vsr_id[1000];
} pra_gen_con_file_t;
在文本配置文件中我有:
num_of_tasks = 5
vsr_id = lior
我需要这样的东西:
for line in text_file_lines:
for member in pra_gen_con_file.members():
if member.member_name == line.split('=')[0]:
pra_gen_con_file.member = line.split('=')[1]
我需要在C中实现。
由于 利奥尔
答案 0 :(得分:2)
这种内省功能虽然在Python这样的语言中非常惯用,但在C语言中是不可能的(没有一些非常奇怪的黑客将依赖于调试信息)。编译器通常不会在生成的二进制文件中存储变量的名称,因此对struct
成员的所有引用都是通过将偏移量添加到内存中struct
的位置来完成的
您必须手动解析并分配给变量名。
采用以下C代码:
struct my_struct
{
int a;
int b;
float f;
};
void assign(void * a)
{
struct my_struct * m = (struct my_struct*) a;
m->a = 100;
m->b = -10;
m->f = 44.1;
}
编译时,编译器实际生成以下程序集(x86_64 Linux,GCC 4.8):
assign:
.LFB20:
.cfi_startproc
movl $100, (%rdi) ;move 100 into the the memory location stored in register %rdi
movl $-10, 4(%rdi); move -10 into (%rdi)+4bytes
movl $0x42306666, 8(%rdi) ;move 44.1(hex representation) into (%rdi)+8 bytes
ret
.cfi_endproc