|
4 / 4 / 1
Регистрация: 15.01.2016
Сообщений: 34
|
|
Как удобнее обойти инкапсуляцию в программе из нескольких файлов на С/С++?13.04.2017, 18:36. Показов 4061. Ответов 34
Метки нет (Все метки)
Ситуация такая: в программах на Бейсике, например, существуют единые для всего кода переменные, с которыми можно полноценно работать в любом месте программы. Есть многочисленные подпрограммы - просто повторяющиеся куски кода, которые для экономии и удобства выносятся отдельно.
Вопрос: как лучше настроить программу на С/С++, чтобы с заданными переменными также можно было работать в любом месте (в т.ч., в функциях, находящихся в другом файле) программы, без непосредственной передачи этих переменных функции? Понимаю, что это, скорее всего, изврат, и будет много аргументов в пользу того, почему так делать не надо. ) Но для моей скромной задачи (перегнать старую программу на бейсике в СИ) никакой инкапсуляции переменных действительно не требуется. Она только мешает и усложняет программу, написанную совсем по другой логике.
0
|
|
| 13.04.2017, 18:36 | |
|
Ответы с готовыми решениями:
34
При открытии нескольких файлов, каждый открывался в отдельной программе
Как обойти ошибку копирования файлов, если usb disk не подключён? |
|
4 / 4 / 1
Регистрация: 15.01.2016
Сообщений: 34
|
||
| 14.04.2017, 18:05 [ТС] | ||
|
0
|
||
|
Комп_Оратор)
|
||
| 14.04.2017, 19:26 | ||
0
|
||
|
4 / 4 / 1
Регистрация: 15.01.2016
Сообщений: 34
|
||
| 14.04.2017, 20:49 [ТС] | ||
|
А вот если от чего и можно сойти с ума - так это если все вокруг будут только отпускать многозначительные намёки на безнадёжность, ничего при этом не объясняя. Или объясняя так, что ничего не понятно - а потом говоря "ну вот, что я вам говорил, безнадёжный случай". ) Не все даже знающие люди могут что-то доступно объяснить.
0
|
||
|
Комп_Оратор)
|
|||
| 14.04.2017, 22:18 | |||
|
Если бы вы выложили критическое место и внятно изложили проблему, то получили бы достаточно точные и сжатые ответы без неоднозначностей.
0
|
|||
|
4 / 4 / 1
Регистрация: 15.01.2016
Сообщений: 34
|
|||
| 14.04.2017, 22:47 [ТС] | |||
|
В моём же случае программу пишу я, один. И часто для трёх строчек кода с формулами, вынесенными отдельно, надо передавать штук 10-15 параметров, что уже не очень удобно. Особенно при настройке (когда в формулах что-то добавляется/убирается). Ещё хуже, когда на выходе требуется вернуть не одно значение, а несколько. Полноценных подпрограмм в СИ нет, поэтому инкапсуляция функций в данном случае никак не помогает, а только усложняет код, заставляя по-разному обходить СИшные ограничения. В целом да, ответы получил, спасибо. Хотя рассуждения вроде "Глобальные переменные, как известно - если и не абсолютное зло, но всё равно - зло, от которого, желательно, держаться подальше." без объяснений, почему оно так, примерно так же информативны, как объяснения малышу "вот вырастешь - тогда поймёшь". Собственно, это же относится и к советам "а не проще ли создать хедер с неймспейсом. И в нём всё описать.". ) А вот конкретные примеры кода от nd2 и Captain Maxee в начале ветки если даже кому-то будут непонятны, то, по крайней мере, уже дают возможность разобраться в данном конкретном случае.
0
|
|||
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
|
|||
| 14.04.2017, 23:03 | |||
|
1
|
|||
|
Комп_Оратор)
|
|||||||
| 14.04.2017, 23:11 | |||||||
![]() О засорении пространства имён вы знаете.
0
|
|||||||
|
4 / 4 / 1
Регистрация: 15.01.2016
Сообщений: 34
|
||||||||
| 15.04.2017, 00:24 [ТС] | ||||||||
|
0
|
||||||||
|
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
|
|
| 15.04.2017, 00:30 | |
|
глобальные переменные в больших проектах массу проблем привносит, когда правка кода в одном месте ломает логику в другом и чтобы найти проблему, надо выискивать и анализировать все места, в которых как-то обращаются к таким переменным. вот идеальный пример того, во что может вылиться подобный подход:
ЩИ!!!Симулятор жестокости http://www.gamedev.ru/projects/forum/?id=160897 а в маленьких программках, которые нужны на одно выполнение - почему бы и нет, если это сэкономит время на написание. тяп ляп, готово, запустил, получил результаты, код выкинул, сэкономил время.
0
|
|
|
Комп_Оратор)
|
||||
| 15.04.2017, 00:40 | ||||
|
0
|
||||
|
4 / 4 / 1
Регистрация: 15.01.2016
Сообщений: 34
|
|||||
| 15.04.2017, 01:45 [ТС] | |||||
|
Добавлено через 17 минут Сейчас же для выноса повторяющихся кусков кода за пределы программы приходится городить функции, часто со множеством параметров, которые тут же напрямую передаются аналогичным внутренним переменным - просто лишнее ненужное действие. И неудобства доставляет как раз то, что я не могу ни изменить значение основной переменной изнутри функции, ни вернуть назад больше одного параметра. Ну это было до тех пор, пока не догадался передавать функции указатели. =\ Но всё равно получается довольно громоздко и неудобно при отладке - при обкатке формул часто меняется кол-во компонентов, что ведёт к изменению списка параметров функции как минимум в трёх местах программы (сама функция, заголовочный файл и ВСЕ точки вызова). Потом, если что-то не понравилось - приходится всё откатывать назад. Имхо лишний неоправданный гемор.
0
|
|||||
|
Комп_Оратор)
|
||||||
| 15.04.2017, 09:22 | ||||||
|
0
|
||||||
|
4 / 4 / 1
Регистрация: 15.01.2016
Сообщений: 34
|
||||
| 15.04.2017, 09:56 [ТС] | ||||
|
0
|
||||
|
Комп_Оратор)
|
||
| 15.04.2017, 12:34 | ||
|
*** Прилетит вдруг волшебник, В голубом вертолёте, И научит меня си пляс пляс. Растолкует алфавит, С поумненьем поздравит, И на радостях пустится в пляс! Так не бывает. Сначала нужно читать, напрягаться и пытаться строить
0
|
||
|
4 / 4 / 1
Регистрация: 15.01.2016
Сообщений: 34
|
|||
| 15.04.2017, 14:06 [ТС] | |||
|
В первый раз это заметил ещё у Фигурнова в его книге про MS-DOS - и на фоне удобных и понятных учебников, где после объяснения действия команды все её возможные параметры, например, сводились в таблицы, был неприятно поражён, что никак не могу разобраться с элементами файлов config.sys и autoexec.bat, про которые вообще ничего толком не объяснялось. Изложение шло в стиле "Вы можете сделать вот так вот. А если Вам понадобится вот это - то можете сделать вот так. А ещё иногда делают вот так." И даже эта скудная информация была как-то бессистемно раскидана по всей книге, что сразу и не найдёшь. В итоге и полный список возможных команд, и их назначение, и возможные параметры - кроме каких-то отдельных примеров - после прочтений той книги остались тайной за семью печатями. Но там я хотя бы знал, что мне нужно искать! К сожалению, впоследствии стал встречать много такой литературы, которая скорее "натаскивает" на какой-то ограниченный круг типовых действий и задач, чем что-то объясняет. И не всегда даже понятно, что именно тебе недообъяснили, где это взять, или как правильно задать вопрос.
0
|
|||
| 15.04.2017, 14:06 | |
|
подскажите обойти защиту в программе
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|