Предположим, что у меня есть переменная counter
. Если мне нужно:Метод предотвращения глобальных переменных в C
- доступ и изменить переменную из многих мест в коде
- убедитесь, что переменная модифицируется в «правильный» путь,
это решение адекватным, или есть ли более эффективные/чистые способы сделать это?
int counter_access(int value) {
static int counter = 0;
if (value > 100) {
printf("there is a bug in the code");
return counter;
}
counter += value;
return counter;
}
А потом, когда мне нужно изменить переменную:
counter_access(10); /* increase counter by 10 */
counter_access(-2); /* decrease counter by 2 */
И когда мне нужно получить доступ к переменной:
if (counter_access(0) == 100) do_something();
Это решение кажется довольно запутано для меня. Однако я не могу придумать очень много хороших способов сделать это. Я мог бы использовать глобальные переменные (которые вызывают ошибки). Я мог бы передать адрес counter
функциям, которые в нем нуждаются, но это не гарантирует, что переменная не будет изменена некорректно (в приведенном выше примере, если counter
увеличивается более чем на 100, существует ошибка).
По существу, проблема с использованием функции для доступа к переменной заключается в том, что нет удовлетворительного способа сообщить вызывающему, что это значение неверно.
Кроме того, это не очень безопасно для потоков, если вы когда-либо захотите использовать потоки. –
Ваши примеры показывают только константу, переданную 'counter_access()'. Всегда ли значение всегда является константой? – chux