1

我听说了故事的两端。一种观点认为,使用数值变量的特殊值来表示特殊状态是一种设计缺陷。但是,我一直遇到这种行为。

一个例子是一个字节无符号整数,其中值 255 表示缺少信息。

这是一个不好的做法吗?如果是这样,在什么特殊情况下是允许/鼓励的?

4

2 回答 2

1

这在很大程度上取决于情况;一如既往,力求用最简单、最容易理解的方式写东西。希望异常情况处理不会弄乱正常情况的代码(这是异常背后的想法,但它们会造成自己的混乱......)。

选择用于特殊情况的值时要小心。例如,C/Unix 约定使用了很多,但请确保使用“不可能”的值。因此,getchar(3)返回一个字符代码作为int,但返回一个非字符EOF作为文件结尾。类似地,read(2)返回读取的字符数(如果没有要读取的内容,则可能为 0),或错误时返回 -1。

于 2013-02-22T11:40:17.420 回答
0

这绝对不是一个不好的做法,假设您负担得起,即可表示整数的范围有足够的额外值,您永远不需要在现实生活中使用。

例如,如果您需要完整范围的无符号字节,包括 255,那么给 255 赋予“未知”的新含义将是一个问题。如果 255 从未用于“真实”数据,那么您可以随意为其赋予任何您想要的含义。

然而,问题是在整个代码中使用特殊数字而不给它们分配特殊名称。例如,

if (myByte == 255) {
    // Process the situation when the value is unknown
}

无疑是坏的。您应该命名所有特殊常量,并在整个代码中仅使用这些名称:

if (myByte == UNKNOWN_VALUE) {
    // You can skip the comment about processing an unknown value:
    // the name of the constant tells your readers what's going on.
}
于 2013-02-22T11:43:34.273 回答