Как избавиться от глобальных переменных c

от admin

Как избежать глобальных переменных в этом случае (встроенный C)

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

Например, монитор батареи, в этом случае есть 4 функции, которые должны читать или изменять переменную. У меня все эти функции используют переменную LowVoltage.

  • Проверьте Voltage () и Save Low Voltage (), чтобы прочитать Low Voltage.
  • Load Low Voltage () необходимо написать Low Voltage.
  • Меню Voltage () должно считывать и записывать Low Voltage.

Как я могу сделать это, не делая глобус низкого напряжения ?? Нужно ли мне делать другую функцию для чтения или записи низкого напряжения? Что-то вроде этого:

Или есть способы сделать это лучше? Думаю, должно быть 🙂 В последнее время я читал о структурах, но, честно говоря, я не совсем понимаю их и даже не уверен, что это поможет мне в таких случаях?

2 ответа

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

В начале вашей программы вы выделяете для нее память и инициализируете элементы некоторыми начальными значениями:

Затем вы передаете указатель на всю структуру функциям, которые устанавливают или читают отдельные значения, например:

Освободите структуру, когда она не нужна:

Два решения, о которых я могу думать

Сделайте сигнатуры функций следующим образом

а затем передайте LowVoltage и присвойте ему возвращаемое значение, как это

Измените LowVoltage внутри функции и передайте указатель на исходный LowVoltage следующим образом

тогда вы можете использовать это так

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

Как избавиться от глобальных переменных?

Имеется шахматная программа. В ней используются глобальные переменные. Как можно от них избавиться? Пробовал объявить строки через enum и поместить это всё в main, а потом передавать их в функции, но ничего не вышло. Подскажите как исправить?

Раз вопрос помечен тегом с++ , то можно перенести все глобальные переменные в класс, а его вынести в отдельный заголовочный файл:

В cpp-файле будет это (код InitializingBoard перенесен в конструктор):

Кстати для проверки четности числа, можно проверять не остаток его деления на 2:

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.11.43304

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как избежать глобальных переменных в C?

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

Читать:
Failed to initialize the engine stronghold crusader 2 как исправить

Здесь действительно сложно сказать что-то общее. Есть книги по структурированному программированию в целом, которые могут быть полезны, но если вы обнаружите проблему в каком-то конкретном месте, будет проще, если вы покажете нам несколько подписей и призывов, чтобы понять, чего вы пытаетесь достичь. Вы можете удалить остальную часть кода. — viraptor

используйте местные жители 🙂 . используйте передачу по ссылке везде, где вы можете . — KedarX

5 ответы

В зависимости от того, что делают ваши переменные, глобальная область может быть лучшей областью. (Подумайте, что флаги сигнализируют о прибытии прерывания и должны обрабатываться в удобное время в середине цикла вычислений.)

Небольшие служебные программы часто кажутся намного чище, если использовать глобальные переменные (особенно я думаю о синтаксических анализаторах малых языков); но это значительно усложняет интеграцию небольших служебных программ в более крупные программы в будущем. Всегда есть компромиссы.

Но велики шансы, что «правильная» организация данных не будет казаться такой громоздкой. Если вы разместите здесь код, кто-то может предложить более чистый макет, но настоящие проблемы возникают, когда код выходит за рамки легко понятных небольших образцов.

У меня МНОГО любимых книг по стилю программирования, но я думаю, что лучшее, что я знаю, чтобы разрешить эту ситуацию, — Элементы стиля программированияАвторы: Керниган и Плаугер. Он довольно старый, и его трудно найти, но он короткий, милый и его стоит где-то использовать.

Это не так коротко, не так мило, но все же стоит найти Код завершен, 2-е издание. Он намного более подробен, содержит гораздо больше кода и обеспечивает гораздо больше разнообразия, связанного с проектированием программного обеспечения. Это превосходно, но могло бы быть более устрашающим.

Нет ничего лучше изучения мастеров: код в Расширенное программирование в среде Unix, 2-е издание феноменален, стоит каждого часа изучения.

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

Статические переменные вместо глобальных на Си/Си++

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

Есть простой способ избавиться от большинства глобальных переменных.

Переменная A располагается в глобальной области памяти, но имеет локальную область видимости (в пределах функции fun ). То есть переменная сохраняет свое значение между вызовами функции. Начальное значение переменной равно 10 .

Этот способ не годится, если функциям нужно обмениваться данными, например, обработчику прерывания с основной программой. Это решается созданием глобальной переменной в отдельном файле. Ниже приведен код такого файла.

Область видимости переменной A — только этот файл. Никаким способом к ней нельзя получить доступ из других файлов. Функции setA и getA позволяют получить и установить значение переменной.

Похожие статьи