【发布时间】:2017-11-23 15:03:19
【问题描述】:
我有一个函数可以返回指向结构或 NULL 的指针(举例说明 get_my_struct_from_[X] 函数的返回可能性):
struct my_struct *my_function(my_struct i) {
if (i.value < 5) return i;
else return NULL;
}
在主程序中我多次调用此函数,然后检查值是否为 NULL:
struct my_struct *q;
q = get_my_struct_from_A();
if (q == NULL) {
// display an error message and exit
}
q = get_my_struct_from_B();
if (q == NULL) {
// display an error message and exit
}
CppCheck 告诉我 if 语句是多余的,或者可能存在空指针取消引用。
问题:
- 为什么 CppCheck 会给我这些消息?
- 如何正确检查函数的返回值,以免收到此消息
编辑:
忘了提到 my_function 是两个 get 函数行为方式的示例。
get_my_struct_from_A 和 get_my_struct_from_B 内部逻辑不同,但输出数据类型与 my_function 中显示的相同。我有很多我调用并检查返回值的 get_my_struct_from_X 函数。因此,为每个 get 创建一个新结构不是一种选择,我认为这不是一个好选择,因为用于同一目的的大量变量。
写 q == null 或 !q 从 cppcheck 返回相同的消息,我认为这是正常的。
【问题讨论】:
-
my_function有问题:返回类型是struct my_struct *(一个指针)但是你返回一个int(i)。 -
在使用 cppcheck 之前,您的代码会在没有警告的情况下编译。如果您没有收到警告,请使用
-Wall进行编译 -
my_function和get_my_struct_from_A一样吗?
标签: c null-pointer cppcheck