Действительно ли мне нужны функции доступа для доступа к глобальной переменной из другого файла? - PullRequest
0 голосов
/ 04 мая 2020

В моем коде (коде игрового движка) есть несколько исходных (. c) файлов, которые поддерживают статус игры, такой как

START
CONFIGURE
STOP
END
DEFAULT
RUNNING

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

Так что у меня есть ограничил область действия этой переменной одним файлом, используя ключевое слово static, и добавил методы доступа, такие как get or set APIs, в тот же файл. Таким образом, другие файлы получают доступ только к этой переменной с помощью API доступа.

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

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

1 Ответ

1 голос
/ 04 мая 2020

Тот факт, что глобальные переменные являются «плохой практикой», полностью основан на мнении и на 100% зависит от контекста. Невозможно сказать, применяете ли вы такую ​​«плохую практику» или нет, не глядя на ваш код. Глобальные переменные не являются плохой практикой как таковые , если использовать их неправильно. Глобальные переменные часто необходимы в C. Возьмем в качестве примера стандартную библиотеку C: errno - это глобальная переменная, которая используется практически везде в коде библиотеки и коде пользователя для проверки на наличие ошибок. Это плохая практика? Могли ли они определить функцию get_errno() вместо этого (ну, если честно, они фактически сделали это просто скрытым ... но это по сложным причинам параллелизма)? Я позволю вам решить.

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

...