c++ where/how 正确定义静态文本

c++ where/how to correctly define static text

我正在用 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

然后将它包含在我需要的地方?

此处的最佳做法是什么?

o/

编辑:

感谢您提醒我使用 const 而不是使用 defines;这是一个重点。

细化我的问题:我还想知道文件结构应该是什么样子(因为 .h 文件传统上包含声明和 .cpp 文件定义)。

我知道这应该如何查找函数和 类 一个结构(如 Xaqq 作为答案发布的那个)应该去哪里,因为它有 static/const 个成员?

由于这是 C++ 标签,我建议尽可能远离宏。

如果你的编译器支持,我会使用constexpr来定义那些静态文本。

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

然后您可以像这样使用它:

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

处理游戏中的字符串(对话等)的一种常见方法是将它们存储在您在运行时加载一次并存储在变量中的资产文件中。

这样您就可以避免重新编译所有内容来修复拼写错误,您可以轻松地使用多种语言等。

我会把它写在下面包含的文档的顶部:

const static std::string CErrorMessage = "Usage error: correct usage is ./bla - bla2 -etc";

我使用字符数组:

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

static const 允许编译器将文本放在只读部分,因为只有一个实例,编译器可以直接访问它(无需复制到堆栈)。

数组符号允许在编译时计算长度:

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

1U代表nul终止符