我有一个静态检查器,它抱怨在if条件下使用strncmp,说
Logical operation performed on expression with possible side effects.
strncmp是否有潜在的副作用,或者我可以将其视为假阳性吗?
if (strncmp(something1, pCurEntry->something2, sizeof(pCurEntry->something2)) == 0)
答案 0 :(得分:1)
std::strncmp
有副作用(例如,c样式的字符串通过const
传递)。对于您提供的示例,您的静态分析器将发出错误消息。
但是好的静态分析器会“抱怨”类似的东西
(expression) ? n = strncmp(...) : 1
,因为它的副作用是仅在可能分支的子集上设置n
。 (MISRA禁止这样做。)