Связать переменные структуры? - PullRequest
1 голос
/ 28 декабря 2011

У меня есть структура, которую я хотел бы связать между собой переменными.Вот фрагмент кода:

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

Есть ли способ сделать это в C, без необходимости создавать функции для изменения переменных?

Ответы [ 3 ]

4 голосов
/ 28 декабря 2011

Нет, для этого вам нужно определить функции.

В 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; }
};

2 голосов
/ 28 декабря 2011

В вашем конкретном случае вы можете написать:

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;
    };
};

(предполагается, что машина с прямым порядком байтов.)

0 голосов
/ 28 декабря 2011

Нет.Именно поэтому переменные обычно заключаются в методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...