在哪里定义 C++ 中的错误代码常量

Posted

技术标签:

【中文标题】在哪里定义 C++ 中的错误代码常量【英文标题】:Where to define error code constants in C++ 【发布时间】:2014-04-01 19:26:55 【问题描述】:

我从 C++ DLL 导出了一个方法,然后从 VB.net 表单应用程序调用它。 C++ 方法目前没有返回值(void),但我想改进它并返回一个表示一系列错误代码的 int。 (如果一切顺利,我打算返回零。)

在哪里以及如何定义这些错误代码的最佳位置?

我是否应该在我的 CPP 文件顶部执行以下操作:

#define ERR_NEGATIVE_CELL_SIZE 1
#define ERR_INVALID_FILE_PATH 2
etc

VB.net 应用程序也会定义这些相同的代码,然后根据代码向用户显示 UI 消息。

显然我更愿意在 DLL 中抛出一个异常并在 VB.net 中捕获它(连同相关的异常消息),但这似乎无法使用 extern "C" __declspec(dllexport) 方法.

很高兴听到有关替代设计模式的信息。我还计划通过 C++ 控制台可执行文件公开 DLL 方法,因此将错误消息存储在 DLL 中并让它们可用于控制台和 UI 应用程序是理想的。

【问题讨论】:

【参考方案1】:

如果您希望其他编译单元可以使用错误代码,那么最好将它们放在头文件中。通常在编写库代码时,您会创建一个或多个头文件,其中声明使用库所需的所有常量、类型、函数和类。然后将实现编译到库中。库的使用者包括您的标头和导入库。

关于您的常量,您建议使用#define 来声明它们。不要那样做。考虑使用常量或枚举。预处理器通常是尽可能少使用的东西。

【讨论】:

【参考方案2】:

请尽可能避免使用预处理器。

对于您的场景,定义枚举是合理的。 在函数原型旁边定义它。 要公开翻译,请使用翻译功能并将其导出。 比如:

size_t TranslateError(int error, char* buffer, size_t size)

返回:已翻译消息的大小,如果返回 ,则缓冲区中的消息

【讨论】:

以上是关于在哪里定义 C++ 中的错误代码常量的主要内容,如果未能解决你的问题,请参考以下文章

我在哪里放置 C++ 自定义异常代码?

我的代码中的错误在哪里?

C++:隐式常量转换中的溢出 [-Woverflow]

在 C++ 中在哪里声明/定义类范围常量?

错误代码在哪里定义?

C++ 线程错误:没有名为“type”的类型