在哪里定义 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++ 中的错误代码常量的主要内容,如果未能解决你的问题,请参考以下文章