.. title:: clang-tidy - bugprone-suspicious-string-compare bugprone-suspicious-string-compare ================================== Find suspicious usage of runtime string comparison functions. This check is valid in C and C++. Checks for calls with implicit comparator and proposed to explicitly add it. .. code-block:: c++ if (strcmp(...)) // Implicitly compare to zero if (!strcmp(...)) // Won't warn if (strcmp(...) != 0) // Won't warn Checks that compare function results (i,e, ``strcmp``) are compared to valid constant. The resulting value is .. code:: < 0 when lower than, > 0 when greater than, == 0 when equals. A common mistake is to compare the result to `1` or `-1`. .. code-block:: c++ if (strcmp(...) == -1) // Incorrect usage of the returned value. Additionally, the check warns if the results value is implicitly cast to a *suspicious* non-integer type. It's happening when the returned value is used in a wrong context. .. code-block:: c++ if (strcmp(...) < 0.) // Incorrect usage of the returned value. Options ------- .. option:: WarnOnImplicitComparison When `true`, the check will warn on implicit comparison. `true` by default. .. option:: WarnOnLogicalNotComparison When `true`, the check will warn on logical not comparison. `false` by default. .. option:: StringCompareLikeFunctions A string specifying the comma-separated names of the extra string comparison functions. Default is an empty string. The check will detect the following string comparison functions: `__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`.