代码之家  ›  专栏  ›  技术社区  ›  kutschkem

strncmp有副作用吗?

c++
  •  0
  • kutschkem  · 技术社区  · 5 年前

    我有一个静态检查器,它抱怨在if条件下使用strncmp,说

    Logical operation performed on expression with possible side effects.
    

    strncmp是否有潜在的副作用,或者我可以忽略它作为假阳性?

    if (strncmp(something1, pCurEntry->something2, sizeof(pCurEntry->something2)) == 0)
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Bathsheba    5 年前

    std::strncmp 允许有副作用(传递c样式的字符串 const 例如)。对于您提供的示例,静态分析器正在错误地发出消息。

    但是一个好的静态分析器会“抱怨”像

    (expression) ? n = strncmp(...) : 1
    

    因为它有设置的副作用 n 仅在可能分支的子集上。(米斯拉不同意。)