Как я могу отследить значение логического значения во время выполнения? - PullRequest
0 голосов
/ 23 апреля 2020

Я хочу определить логическое значение, которое отслеживает значения двух других логических величин и динамически обновляется при их изменении, как я могу этого достичь?

#include <stdio.h>

typedef struct candle_s {
    bool is_on;
    int flame_size;
}candle_t;

typedef struct led_s {
    bool is_on;
    int ampers;
}led_t;

typedef struct light_s {
    bool is_any_on;
    candle_t candle;
    led_t led;
}light_t;

int main()
{
    light_t light1;

    light1.led = {0, 10};
    light1.candle = {1, 20};
    light1.is_any_on = light1.led.is_on | light1.candle.is_on;

    printf("Is any on: %d, is light on %d, is candle on %d\n",
            light1.is_any_on, light1.led.is_on, light1.candle.is_on);

    light1.candle.is_on = 0;

    printf("Is any on: %d, is light on %d, is candle on %d\n",
            light1.is_any_on, light1.led.is_on, light1.candle.is_on);

    return 0;
}

Вывод программы:

Is any on: 1, is light on 0, is candle on 1
Is any on: 1, is light on 0, is candle on 0

Как я могу сделать is_any_on "0"?

Я мог бы добиться этого с помощью функции, но могу ли я сделать это иначе ? Я думаю, что использование логического указателя тоже не сильно поможет, так как меня интересует результат двух логических значений.

1 Ответ

0 голосов
/ 23 апреля 2020

Вам нужно использовать функцию:

bool is_any_on(light_t *light)
{
    return light->led.is_on || light->candle.is_on;
}

И вызывать ее так:

is_any_on(&light1)
...