Stringize loopcounter引用C struct的成员

时间:2016-05-23 20:14:21

标签: c struct stringification

我有两个结构,如:

typedef unsigned char byte;

struct my_struct_2 {
int type;
int length; //will be 2 in this case
byte value1; //MSB
byte value2; //LSB
}

struct my_struct_4 {
int type;
int length; //will be 4 in this case
byte value1; //MSB
byte value2;
byte value3;
byte value4; //LSB
}

我想循环使用"值"结构中的成员基于"长度"将字节值连接成一个数字。我想知道是否可以使用某种字符串化,以便我可以构造一个类似于此结构的for循环:

int value = 0;
for( int i = 1; i <= length; i++)
{
    value = value << 8;
    value = value & my_struct.value#i#;
}

我想利用结构成员按顺序命名的事实。

我知道我可以通过使用指向第一个值的指针并递增指针来完成此任务。我试图让自己熟悉字符串化,所以请不要使用类似解决方案的指针。谢谢!

1 个答案:

答案 0 :(得分:0)

没有办法通过构造这样的名称来遍历struct字段。一旦编译了C程序,任何有关名称的信息都会消失(忽略调试器的信息);它是硬编码到机器代码中的所有偏移量。

对于某些C preprocessor abuse,你可以获得有点像循环名称的东西,但它并不漂亮,绝对不推荐,除非你只是为了挑战这样做。