|
1
3
PC-lint可以发现这种问题。 看 http://gimpel-online.com/MsgRef.html ,错误代码947:
|
|
|
2
1
使用64位编译器编译代码,并打开WP64。 因为指针是64位宽的,但是int、long、dword等保持32位宽,所以您会收到将ptrdiff_t缩短为int32_t的警告。 |
|
3
0
只有当两个指针相距超过2000万字节(2GB)时,这才是一个问题。这意味着你:
所以,看看这些特殊情况。 我认为在大多数情况下这不是问题。 |
|
|
4
0
由于我们的代码已经与gcc一起编译,我认为最快的方法可能是:
以下是需要对GCC进行的更改概述: 将警告添加到:
除了直接检测指针减法,还有一件事要做,那就是检测先将指针转换为整数类型,然后再减法的情况。这可能更困难,这取决于您的代码是如何结构的,在外面的情况下,regexp搜索(。 ItPrTrt)。 -.*-(*intptr\u t)工作得很好。 |
|
|
5
0
不管它值多少钱,我都经历了 Microsoft compiler warning docs for VS2017 并搜索所有涉及“signed”、“trunc”(截断)和“conv”(转换)的警告,这些警告高于警告级别1。然后,我通过一个属性表明确地为解决方案中的所有项目启用了这些警告。若要启用特定的警告,请转到“C/C++ +命令行/附加选项”,并将它们添加到格式/WLγ*中,其中L是您要将它们分配给的警告级别,而“γ”是警告号。 所以我想到的是这个列表: /w14365/w14018/w14146/w14245/w14092/w14287/w14308/w14388/w14389/w14757/w14707/w14302/w14305/w14306/w14307/w14308/w14309/w14310/w14311/w14312/w14051/w14055/w14152/w14239/w1423/w14242/w14243/w14244/w14254/w14267/w1433/w1434/w1434/w1437/w14686/w14826 请注意,我使用了/w1,因为我们的全球警告级别已经降到了1(不要评判我,这是遗产)。因此,当您将默认警告级别设置为3或更高时,其中一些警告已经启用。 这导致超过88000个警告,其中大多数是关于在使用stl的代码中使用in t而不是size_t,以及有关Windows API类型(如句柄、wParams和uint_ptrs等)的转换。在第三方库中,我只发现了一些与实际指针算法相关的警告,但在上下文中,这些警告看起来还不错。 不管怎样,我认为这个相关警告列表可能对某些人有所帮助。 此外,使用本答案中描述的工具: https://stackoverflow.com/a/22745579/9635694 另一种选择是根据 CppCoreGuideLines . 转到“主菜单/分析/配置代码分析/解决方案”,并为所有要分析的项目选择“C++核心检查原始指针规则”。然后是“主菜单/分析/运行代码分析/用于解决方案”。注意:修改项目,需要很长的时间来构建,可能会生成很多警告。您可能希望将精力集中在c26481“不要使用指针算术”和c26485“没有数组到指针衰减”。 |
|
AstralHex · 矩阵乘法代码工作不正常 8 月前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 8 月前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 8 月前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 9 月前 |