Я создаю консольную программу на C ++.
У меня есть статические текстовые строки, такие как "error wrong usage, usage is: program <parameter> <parameter2>"
или же "game over!"
Недавно у меня был проект C, где весь код должен был быть в одном файле c. Я только что сделал много определений, как это:
#define ERRUSAGE "Usage error: correct usage is ./bla - bla2 -etc"
после включения и перед функцией предопределения.
Сейчас я работаю над программой на C ++, где разрешено иметь несколько файлов. Я узнал, что я буду использовать файл .h для определения чего-либо и файл .cpp для реализации чего-либо.
Так что есть способ сделать staticTextOutput.h и заполнить его
#ifndef BLABLA
#define BLABLA "sometext"#endif
а потом включить, где мне это нужно?
Какова лучшая практика здесь?
о /
РЕДАКТИРОВАТЬ:
Спасибо за напоминание о создании const вместо использования определений; это важный момент.
Чтобы уточнить мой вопрос: я также хотел бы знать, как должна выглядеть структура файла (поскольку файлы .h традиционно содержат объявления и определения файлов .cpp).
Я знаю, как это должно выглядеть для функций и классов, куда должна идти структура (например, Xaqq, опубликованная в качестве ответа), поскольку она имеет статические / константные члены?
Распространенным способом работы со строками (диалогами и т. Д.) Является сохранение их в файле ресурсов, который вы загружаете один раз во время выполнения и сохраняете в переменных.
Таким образом, вы избегаете перекомпиляции всего, чтобы исправить опечатку, вы можете легко работать с несколькими языками и т. Д.
Поскольку это тег C ++, я рекомендую по возможности избегать макросов.
Если поддерживается вашим компилятором, я бы использовал constexpr
определить этот статический текст.
struct Messages
{
constexpr static const char * const blabla = "sometext";
};
Затем вы можете использовать его так:
std::cout << Messages::blabla << std::endl;
Я использую массивы символов:
static const char my_text[] = "Three little froggies, ready to jump.";
static const
позволяет компилятору размещать текст в разделе, доступном только для чтения, и, поскольку существует только один экземпляр, компилятор может получить к нему прямой доступ (без копирования в стек).
Обозначение массива позволяет рассчитать длину во время компиляции:
const unsigned int text_length = sizeof(my_text) - 1U;
1U представляет нулевой символ завершения.
Я хотел бы написать это в верхней части документа ниже:
const static std::string CErrorMessage = "Usage error: correct usage is ./bla - bla2 -etc";