检测gcc中未初始化的变量

时间:2021-04-15 12:49:51

标签: gcc

以下(损坏的)示例代码 scanf 将输入字符串转换为整数,但允许将空字符串转换为 0:

#include <stdio.h>
#include <string.h>

int parse(const char *p)
{
    int value; // whoops! forgot to 0 here.
    if (*p && sscanf(p, "%d", &value) != 1)
        return -1;
    return value;
}

int main(int argc, char **argv)
{
    const char *p = argc > 1 ? argv[1] : "";
    int value = parse(p);
    printf("value = %d\n", value);
}

但它使用 -Wall 编译干净。

https://godbolt.org/z/sPbx99Ms5

但由于明显问题而失败:

$ ./test 123
value = 123
$ ./test xxx
value = -1
$ ./test ""
value = 32765

我意识到很难确定 scanf 可能 不会像它那样填充值 看不到代码,但是否有标志或扫描仪可以在(大型)代码体上运行以尝试查找是否存在指针传递未初始化变量的地方?

...即使是能找到所有未初始化变量的东西也会很有用。

0 个答案:

没有答案