如何使用 C 语言处理 Tizen Native 应用程序中的错误?
How can I handle error in Tizen Native app using C language?
C语言中没有try/catch语句。
我该如何处理这些错误?
C 库使用不同的错误处理机制:
每个函数的return值可能包含错误值。然后,调用者需要在每次函数调用后验证 return 值是否指示非错误状态。例如 <unistd.h>
.
中的大多数函数
有些使用在发生错误时设置为非零值的全局变量。例如,在失败时,fopen
将 errno
(来自 C 标准库的全局变量)设置为错误值,并且 returns -1
而不是文件描述符。这也是 C 标准的一部分,参见:http://en.cppreference.com/w/c/error/errno.
最后,可以使用 longjmp
: The calles first calls setjmp
at a given place in code. The library function, when it fails, then jumps directly to that place using longjmp
. For example libpng
does this, as described in http://www.libpng.org/pub/png/libpng-manual.txt 模拟 C++ 中的异常处理。但这有几个困难。
我完全同意@tmlen 并为特定于 Tizen 添加了更多内容,
如果错误源自 Tizen Native API,您可以使用 get_last_error()
捕获错误。
int get_last_result (void);
char* get_error_message (int err);
并且可以捕获来自 EFL 的错误 with eina_error_get()
/eina_error_msg_get()
但遗憾的是 Tizen 2.4 不支持 eina 错误函数。它只支持错误类型。 (我无法理解三星的 EFL 家伙...)
C语言中没有try/catch语句。 我该如何处理这些错误?
C 库使用不同的错误处理机制:
每个函数的return值可能包含错误值。然后,调用者需要在每次函数调用后验证 return 值是否指示非错误状态。例如 <unistd.h>
.
有些使用在发生错误时设置为非零值的全局变量。例如,在失败时,fopen
将 errno
(来自 C 标准库的全局变量)设置为错误值,并且 returns -1
而不是文件描述符。这也是 C 标准的一部分,参见:http://en.cppreference.com/w/c/error/errno.
最后,可以使用 longjmp
: The calles first calls setjmp
at a given place in code. The library function, when it fails, then jumps directly to that place using longjmp
. For example libpng
does this, as described in http://www.libpng.org/pub/png/libpng-manual.txt 模拟 C++ 中的异常处理。但这有几个困难。
我完全同意@tmlen 并为特定于 Tizen 添加了更多内容,
如果错误源自 Tizen Native API,您可以使用 get_last_error()
捕获错误。
int get_last_result (void);
char* get_error_message (int err);
并且可以捕获来自 EFL 的错误 with eina_error_get()
/eina_error_msg_get()
但遗憾的是 Tizen 2.4 不支持 eina 错误函数。它只支持错误类型。 (我无法理解三星的 EFL 家伙...)