c препроцессором — c ++, где / как правильно определить статический текст

Я создаю консольную программу на 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, опубликованная в качестве ответа), поскольку она имеет статические / константные члены?

1

Решение

Распространенным способом работы со строками (диалогами и т. Д.) Является сохранение их в файле ресурсов, который вы загружаете один раз во время выполнения и сохраняете в переменных.

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

8

Другие решения

Поскольку это тег C ++, я рекомендую по возможности избегать макросов.

Если поддерживается вашим компилятором, я бы использовал constexpr определить этот статический текст.

struct Messages
{
constexpr static const char * const blabla = "sometext";
};

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

std::cout << Messages::blabla << std::endl;
1

Я использую массивы символов:

static const char my_text[] = "Three little froggies, ready to jump.";

static const позволяет компилятору размещать текст в разделе, доступном только для чтения, и, поскольку существует только один экземпляр, компилятор может получить к нему прямой доступ (без копирования в стек).

Обозначение массива позволяет рассчитать длину во время компиляции:

const unsigned int text_length = sizeof(my_text) - 1U;

1U представляет нулевой символ завершения.

1

Я хотел бы написать это в верхней части документа ниже:

const static std::string CErrorMessage = "Usage error: correct usage is ./bla - bla2 -etc";
0
По вопросам рекламы [email protected]