gpt4 book ai didi

c++ - 嵌入式 C - 我应该使用哪种类型的错误代码?签名与未签名

转载 作者:行者123 更新时间:2023-11-30 18:47:25 28 4
gpt4 key购买 nike

我最近为嵌入式系统编写了大量 C 代码,我总是想知道我是否应该使用有符号或无符号值作为我的返回类型。有“正确”的方法吗?

我个人更喜欢签名类型,因为它们给了我更广泛的表达 self 的范围。但我使用了大量仅使用无符号类型的遗留代码。

示例 1(我的代码):

int16_t my_initializer(void)
{
return -1; //-> error (critical)
...
return 0; //-> everything is OK
...
return 1; //-> warning (non critical)
...
return 2; //-> another warning
}

示例 2(旧代码):

uint16_t my_initializer(void)
{
return 0; //-> everything is OK
...
return 1; //-> warning (non critical)
...
return 2; //-> another warning or an error
...
}

我查看了 linux 内核编码风格和 Google C++ 风格指南,但没有发现是否使用有符号类型或无符号类型的线索。 有没有“最佳实践”?

最佳答案

如果返回值始终用于返回状态,我更愿意发出一个描述性值,例如

 enum errorcode
{
SUCCESS,
OUT_OF_MEMORY,
INVALID_ARGUMENT, // Like -1 to sqrt
OUT_OF_RANGE, // Indexing into an array or similar.
};

errorcode status = my_function();

这还具有使用符号进行调试的优点,在调试器中您会得到如下内容:

gdb> p status
SUCCESS
...
gdb> p status
OUT_OF_MEMORY

而不是试图记住 1 是否内存不足或其他情况。

很难确定某件事是“警告”还是“错误”。覆盖现有文件是错误还是只是警告?如果您已经覆盖了现有文件,收件人代码会对“警告”做什么? return WARN_FILE_EXISTED; 在这里并不完全有帮助,因为调用者在那里无法有意义地实现任何目标 - 要么有一个标志说“不覆盖现有文件”或“覆盖现有标志”(或两个独立的功能等)

关于c++ - 嵌入式 C - 我应该使用哪种类型的错误代码?签名与未签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48840652/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com