bugprone-suspicious-string-compare

查找运行时字符串比较函数的疑似使用情况。此检查在 C 和 C++ 中有效。

检查具有隐式比较器的调用,并建议显式添加它。

if (strcmp(...))       // Implicitly compare to zero
if (!strcmp(...))      // Won't warn
if (strcmp(...) != 0)  // Won't warn

检查比较函数结果(例如,strcmp)是否与有效常量进行比较。结果值是

<  0    when lower than,
>  0    when greater than,
== 0    when equals.

一个常见的错误是将结果与 1-1 进行比较。

if (strcmp(...) == -1)  // Incorrect usage of the returned value.

此外,如果结果值隐式转换为可疑的非整数类型,则检查会发出警告。当返回值在错误的上下文中使用时,就会发生这种情况。

if (strcmp(...) < 0.)  // Incorrect usage of the returned value.

选项

WarnOnImplicitComparison

当为 true 时,检查将对隐式比较发出警告。默认情况下为 true

WarnOnLogicalNotComparison

当为 true 时,检查将对逻辑非比较发出警告。默认情况下为 false

StringCompareLikeFunctions

一个字符串,指定了额外字符串比较函数的逗号分隔名称。默认是一个空字符串。检查将检测以下字符串比较函数:__builtin_memcmp__builtin_strcasecmp__builtin_strcmp__builtin_strncasecmp__builtin_strncmp_mbscmp_mbscmp_l_mbsicmp_mbsicmp_l_mbsnbcmp_mbsnbcmp_l_mbsnbicmp_mbsnbicmp_l_mbsncmp_mbsncmp_l_mbsnicmp_mbsnicmp_l_memicmp_memicmp_l_stricmp_stricmp_l_strnicmp_strnicmp_l_wcsicmp_wcsicmp_l_wcsnicmp_wcsnicmp_llstrcmplstrcmpimemcmpmemicmpstrcasecmpstrcmpstrcmpistricmpstrncasecmpstrncmpstrnicmpwcscasecmpwcscmpwcsicmpwcsncmpwcsnicmpwmemcmp.