0

这是我的 .cfg

<?xml version="1.0"?>
<def format="1">
  <function name="wcscpy_s">
        <arg nr="1">
            <not-uninit/>
        </arg>
        <arg nr="2">
            <not-uninit/>
        </arg>
        <arg nr="3">
            <not-uninit/>
        </arg>
    </function>
</def>

我用它来检查打击 cpp 文件。

int main() {
    char a[100];
    wcscpy_s(
        a,
        a,
        a);
}

错误是:

D:\staff>cppcheck D:\staff\test.cpp --library=my.cfg
Checking D:\staff\test.cpp...
[D:\staff\test.cpp:4]: (error) Uninitialized variable: a
[D:\staff\test.cpp:5]: (error) Uninitialized variable: a

显然它没有找到第三个参数,它也被单化了。我将文件更改为:

int main() {
    char a[100];
    wcscpy_s(
        1,
        1,
        a);
}

现在它没有显示任何错误。所以我很困惑。cppcheck不能检查第三个参数?

4

2 回答 2

0

当然不是故意的。我认为这是由一些仅用于处理某些特殊功能的旧代码引起的。

你能为此创建一张票吗? http://trac.cppcheck.net/

于 2015-02-03T19:17:08.693 回答
0

最新版本的 Cppcheck (1.70 dev) 能够检测到这个问题:

$ cppcheck test.cpp  --library=my.cfg
Checking test.cpp...
[test.cpp:4]: (error) Uninitialized variable: a
[test.cpp:5]: (error) Uninitialized variable: a
[test.cpp:6]: (error) Uninitialized variable: a
于 2015-06-19T06:31:07.497 回答