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_l、lstrcmp、lstrcmpi、memcmp、memicmp、strcasecmp、strcmp、strcmpi、stricmp、strncasecmp、strncmp、strnicmp、wcscasecmp、wcscmp、wcsicmp、wcsncmp、wcsnicmp、wmemcmp.