我有一个结构,我想让变量彼此相关。以下是代码片段:
struct RSI
{
int RSI;
int ESI = RSI & 0x1F;
int SI = ESI & 0x0F;
int SIL = SI & 0x08;
};
有没有办法在C中执行此操作,而无需创建函数来修改变量?
答案 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)
没有。这正是变量通常用方法封装的原因。