Более разумный способ выполнения кода только один раз в C? - PullRequest
4 голосов
/ 10 апреля 2019

У меня часто есть код вида:

uint8_t bool_var = 0;

for (;;) {
    ...
    if (!bool_var) {
       do_something();
       bool_var = 1;
    }
    ...
}

Есть ли более краткий, не макросовый способ выражения условия if и блока?

1 Ответ

0 голосов
/ 10 апреля 2019

Ваш код максимально читабелен и прост в большинстве случаев.


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

typedef void func_t (void);
...
func_t* do_stuff = do_something;
... 

while(stuff) // this code can't be changed for whatever reason
{
  do_stuff();
}

В таком сценарии вы можете придумать следующее:

void nop (void) {}
...
do_stuff = nop;

Теперь вы можете продолжать звонить do_stuff, но ничего не произойдет.

...