关联结构变量?

时间:2011-12-28 16:57:24

标签: c++ variables struct

我有一个结构,我想让变量彼此相关。以下是代码片段:

struct RSI
{
     int RSI;
     int ESI = RSI & 0x1F;
     int SI = ESI & 0x0F;
     int SIL = SI & 0x08;
};

有没有办法在C中执行此操作,而无需创建函数来修改变量?

3 个答案:

答案 0 :(得分:4)

不,您需要定义执行此操作的功能。

在C ++中,您当然可以封装详细信息:

struct RSI
{
private:
    int rsi;

public:
    RSI(int rsi) : rsi(rsi) {}

    int getRSI() const { return rsi; }
    int getESI() const { return getRSI() & 0x1F; }
    int getSI()  const { return getESI() & 0x0F; }
    int getSIL() const { return getSI()  & 0x08; }
};

答案 1 :(得分:2)

在您的特定情况下,您可以写:

union RSI_t
{
    int RSI;
    int ESI : 5;
    int SI : 4;
    int SIL : 3;
};

这不可移植,因为它依赖于实现定义的构造。

这是一个更有趣的例子:

#include <stdint.h>

union RAX_t
{
    uint64_t RAX;
    uint32_t EAX;
    uint16_t AX;
    struct {
        uint8_t AL;
        uint8_t AH;
    };
};

(假设是小端机器。)

答案 2 :(得分:0)

没有。这正是变量通常用方法封装的原因。