相关疑难解决方法(0)

你是否总是对C中的数字使用'int',即使它们是非负数?

我总是使用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.
}
Run Code Online (Sandbox Code Playgroud)

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

c coding-style

46
推荐指数
8
解决办法
1万
查看次数

获取两个size_t对象的区别是否安全?

我正在调查我的团队使用size_tvs int(或long等)的标准.我看到的最大的缺点是,两个size_t对象的区别可能会导致问题(我不确定具体的问题 - 可能是某些东西没有补充,而签名/无符号会使编译器生气).我使用V120 VS2013编译器在C++中编写了一个快速程序,允许我执行以下操作:

#include <iostream>

main()
{
    size_t a = 10;
    size_t b = 100;
    int result = a - b;
}
Run Code Online (Sandbox Code Playgroud)

该程序导致了-90,虽然正确,但让我对类型不匹配,有符号/无符号问题感到紧张,或者如果size_t恰好用于复杂的数学运算,则会让我感到紧张.

我的问题是,使用size_t对象进行数学运算是否安全,具体而言,区别对待?我正在考虑使用size_t作为索引之类的标准.我在这里看到了一些关于这个主题的有趣帖子,但是他们没有解决数学问题(或者我错过了它).

减去2 size_t的类型是什么?

typedef是否可以包含size_t的签名类型?

c++ size-t

16
推荐指数
3
解决办法
3961
查看次数

什么应该发生在size_t的否定(即`-sizeof(struct foo)`))?

我正在处理一些包含表单表达式的代码

-(sizeof(struct foo))
Run Code Online (Sandbox Code Playgroud)

即a的否定,size_t我不清楚编译器在看到这个时C和C++标准需要什么.具体来说,从此处和其他地方四处查看,sizeof返回类型的无符号整数值size_t.当否定无符号整数时,我找不到任何指定行为的明确引用.有没有,如果有的话,它是什么?

编辑:好的,所以关于无符号类型的算术有一些很好的答案,但事实并非如此.如果否定,它是在无符号整数上运行,还是转换为有符号类型并对其执行某些操作?从标准中预期的行为是"想象它是相似幅度的负数,然后对无符号值应用'溢出'规则"?

c c++ unsigned sizeof size-t

12
推荐指数
1
解决办法
2291
查看次数

标签 统计

c ×2

c++ ×2

size-t ×2

coding-style ×1

sizeof ×1

unsigned ×1