对于不应该为负值的值,我总是使用unsigned int.但今天我 在我的代码中注意到了这种情况:

void CreateRequestHeader( unsigned bitsAvailable, unsigned mandatoryDataSize, 
    unsigned optionalDataSize )
{
    If ( bitsAvailable – mandatoryDataSize >= optionalDataSize ) {
        // Optional data fits, so add it to the header.
    }

    // BUG! The above includes the optional part even if
    // mandatoryDataSize > bitsAvailable.
}

我应该开始用int而不是unsigned int来表示数字吗,即使它们

推荐答案

我是不是应该一直...

The answer to "我是不是应该一直..." is almost certainly 'no', there are a lot of factors that dictate whether you should use a datatype- consistency is important.

但是,这是一个非常主观的问题,没有签名的人很容易搞砸:

for (unsigned int i = 10; i >= 0; i--);

结果是一个无限循环.

这就是为什么包括Google's C++ Style Guide个样式指南在内的一些样式指南不推荐使用unsigned种数据类型.

在我个人看来,我没有遇到过很多由这些问题引起的错误,这些问题涉及到未签名的数据类型——我想说的是,使用断言来判断代码并明智地使用它们(在执行算术时更少).

C++相关问答推荐

CC crate 示例不会与C函数链接

为什么已经设置的值在C中被重置为for循环条件中的新值?

了解一些CLIPS原语数据类型

POSIX文件描述符位置

如何在C中只使用一个带双方括号([i][j])访问语法的malloc来分配动态大小的2d数组?

__VA_OPT__(,)是否可以检测后面没有任何内容的尾随逗号?

如何一次获取一个字符

拥有3x3二维数组并访问数组[1][3]等同于数组[2][0]?

如何使用C for Linux和Windows的标准输入与gdb/mi进行通信?

使用sscanf获取零个或多个长度的字符串

如何在C中只对字符串(包含数字、单词等)中的数字进行重复操作?

C语言中的数字指针

C中的回文数字

如何在C中用bool进行文件I/O?

Valgrind用net_pton()抱怨

Linux Posix消息队列

生成的头文件不包括用户定义的文件

在C中打印指针本身

10 个字节对于这个 C 程序返回后跳行的能力有什么意义

将帧从相机 (/dev/video0) 复制到帧缓冲区 (/dev/fb0) 会产生意外结果