Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
2 / 2 / 0
Регистрация: 29.05.2024
Сообщений: 62

Конфигурация исполняемой программы

15.05.2025, 15:04. Показов 9873. Ответов 64

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемое сообщество.

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

На уровне файлов я использую два подхода. В одном подходе, я храню конфигурационную инфу в файле main.h и инклюжу его внутри main.cpp. Во втором подходе, я храню инфу в файле config.ini и как-то считываю этот файл.
Решение о том, какую конфигурационную инфу, куда закидывать, принимаю исходя из того, как часто приходится её менять в ходе разработки и тестирования кода. Если часто меняю - то в config.ini, если редко - то в main.h. Это делается, чтобы не делать всякий раз пересборку проекта, если поменял путь к какому-то входному или выходному файлу. Поэтому задаюсь вопросом, а почему бы всю инфу не хранить в config.ini? И отвечаю себе так, вот мне недавно книжку Агнера Фога посоветовали, так он всю конфиг инфу в main.h закидывает и не парится. Т.е. наоборот никаких config.ini он не использует.
Вот пример его кода из файла main.h

main.h
C++
1
2
3
4
5
6
7
8
9
10
11
/******************************************************************************
*                        named values
******************************************************************************/
 
// varType values
const int varInt8            = 1;      // 8 bit signed integer
const int varInt16           = 2;      // 16 bit signed integer
const int varInt32           = 3;      // 32 bit signed integer
const int varInt64           = 4;      // 64 bit signed integer
const int varFloat           = 9;      // 32 bit float
const int varDouble          = 10;     // 64 bit double precision float
Поэтому резюмирую первый вопрос, как на уровне файлов грамотно хранить конфигурационную информацию (конфиг), т.е. инфу, которая не меняется в ходе исполнения программы?

Второй вопрос, как организовать хранение конфига на уровне исполняемого кода.
Я тут использую несколько способов.
1. Использую namespace. Это такой способ шифрануть глобальные константы внутрь namespace, чтобы избежать конфликтов.
2. Использую статические поля структур/классов.
Глобальные константы не использовал, т.к. начитался, что это зло. А смотрю код у этого же Фога и там сплошь и рядом глобальные константы без угрызений совести, и даже без namespace. Поэтому я засомневался в своих взглядах на глобальные константы.
А есть ещё такие конфигурационные данные, которые на момент запуска программы не известны, т.е. их не засунешь ни в config.ini, ни в main.h, но они вычисляются в начале программы и не меняются в течение всей программы, например, время запуска программы. Сейчас я их храню в namespace, но уже сомневаюсь в правильности такого подхода.

Поэтому резюмирую второй вопрос, как на уровне переменных вы храните конфигурационную информацию?

Заранее спасибо за ответы.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.05.2025, 15:04
Ответы с готовыми решениями:

Имя и путь исполняемой программы
1. Как получить полное имя (путь+имя+расширение) исполняемой программы? В Borland это было...

Превращение строки в название исполняемой функции
Доброго времени суток. Появился вопрос. Предположим есть TextBox, кнопка и набор функций: void...

""D:\"" не является внутренней или внешней командой, исполняемой программой или пакетным файлом
Только начал изучать С++, и уже в самом начале напоролся на ошибку. Перерыл весь гугл, ответа не...

64
15.05.2025, 23:06
Студворк — интернет-сервис помощи студентам

Не по теме:

Простите начальник..

0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.05.2025, 23:10
Цитата Сообщение от Наталья8 Посмотреть сообщение
Вычисляеться автоматически. (От адреса экзешника)
Точно?

Цитата Сообщение от Наталья8 Посмотреть сообщение
Создаються папки. Тоже автоматически.
Ептить-коптить. А мы то все рукам, руками.
Кликните здесь для просмотра всего текста


0
2 / 2 / 0
Регистрация: 29.05.2024
Сообщений: 62
15.05.2025, 23:14  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Самая главная ошибка вашего вопроса, в фразе "что лучше".
Видимо так оно и есть. Я делаю всеми способами, которые прозвучали в этой ветке. Пытался узнать можно ли остановиться на чём-то одном. Вы мне написали и в общем подтвердили мои подходы. Спасибо.
Попробую на англофоруме почитать, может там ещё чего насоветуют.

Добавлено через 1 минуту
Цитата Сообщение от SmallEvil Посмотреть сообщение
Точно?
Точно можно только сказать, что это точно не требуется. Вопросы вообще в другой плоскости. Это я не вам (вы прекрасно поняли суть вопросов), а восьмой Натальи.
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,214
15.05.2025, 23:28
filt_file(5).mp4
Так удобно. Я так делаю.
Вы все умные, я не очень.
Вы то знаете как программы писать.
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,214
15.05.2025, 23:33
SmallEvil,
Давай я у тебя учиться буду....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2025, 23:33

bat не является внутренней или внешней командой, исполняемой программой или пакетным файлом
Делаю программу, в которой мне нужно запустить bat-ник. Раньше всё отлично запускалось, а теперь не...

параллельная конфигурация
Добрый день. В VS C++ 2008 создаю программку, которая должна бы работать на компах, где не...

Конфигурация компьютера
Практически требуется заново реализовать утилиту от Windows под названием systeminfo хотелось бы...

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

Параллельная конфигурация неправильна
Здравствуйте! Написал программу, которая работает на моем компьютере, но не работает на другом....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
65
Ответ Создать тему
Новые блоги и статьи
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru