1

为什么 Coverity 会产生警告

> "cc" clobber ignored

对于下面提到的代码中的函数调用 htons() 和 ntohs()?

lSocketAddr.sin_port = htons(kUDPServerPort);

我用谷歌搜索发现这个警告也出现在英特尔编译器链中。“cc”clobber被忽略是什么意思?这是否意味着不应将 htons() 和 ntohs() 用于安全编程?有什么办法可以解决这个警告吗?有没有替代的 apis htons() 和 ntohs()?

系统配置:

  1. 覆盖率 5.3
  2. 红帽 6
  3. GCC 版本 4.4.5
4

1 回答 1

0

我相信这意味着该函数被标记为破坏处理器中条件标志的函数,但是这个标记被忽略了。

这个对 OpenViz 的提交显示了正在添加的“cc”clobber,它是内联asm语句的一个参数,它看起来像这样:

asm("bsch %2,%0" : "=r"(bit) : "0"(0), "r"(x & -x) : "cc");
                                                      ^
                                                      |
                                                    hello!

虽然不太清楚为什么会生成警告,也许 Coverity 试图传达有问题的函数包含这样的asm,但它不能在分析中考虑“cc”信息?

我认为没有理由放弃基于此警告的函数,警告似乎相当“元”,不是关于代码本身,而是关于 Coverity 对代码的处理。

注意:我从未使用过 Coverity。

于 2013-05-28T13:33:30.680 回答