2 / 2 / 0
Регистрация: 29.05.2024
Сообщений: 62

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

15.05.2025, 15:04. Показов 9926. Ответов 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,243
15.05.2025, 23:28
filt_file(5).mp4
Так удобно. Я так делаю.
Вы все умные, я не очень.
Вы то знаете как программы писать.
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,243
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ По ссылке 403. Не очень информативно такую ссылку постить. Запись от Usaga размещена Сегодня в 06:46 . . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru