我在 C++ 程序中使用 C 库(我也编写了该库),我想知道我应该如何从 C 库中进行错误处理,以便 C++ 程序能够决定如何处理可能发生的错误。
我最初让 C 库返回一个指示发生错误的值(例如 NULL 或 -1),并且只是向 stderr 打印一条错误消息,但这并不容易被使用该库的程序捕获。
理想情况下,我希望 C++ 程序能够从 C 库中检索错误消息字符串,以便它可以以任何方式处理错误,例如在其他地方记录错误消息。
这有一个共同的设计习惯吗?
最佳答案
所有需要全局状态(errno、get_last_error、...)的方法都会存在并发问题。使用返回 channel 会破坏您的返回值优化。
一个常见的选项是将指向错误结构的指针作为第一个或最后一个参数。
struct Error {
const char* message;
int code;
};
int my_nice_c_function( int a, int b, Error* err ) {
if ( err != NULL ) {
err->message = "";
err->code = 0;
}
return a + b;
}
当你从 C++ 传入它们时,它可能看起来像:
Error err;
...
auto foo = my_nice_c_function( 5, 6, &err );
if ( err.code != 0 ) {
std::cerr << err.message << std::endl;
}
但请确保始终设置错误成员!
关于c++ - C++ 程序使用的 C 库中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61732897/