自定义函数中的return 0;

假设我们写一个关于在顺序表尾部添加一个元素的函数

1
2
3
4
5
int appendElem(SeqList *L, Element e){
if(L->length == MAX) return 0;
L->data[L->length++] = e;
return 1;
}

可以看到我这里使用了两个return,当顺序表满的时候,则返回一个0,当我成功在末尾添加好了一个element类型的e元素的时候,则返回一个1

在自定义函数中,我们return的值是返回给我们的main的。其实我觉得你可以理解为这是一个状态码(404,200这样的状态码)。

如果说我们添加成功的话,函数返回一个1用于让main函数来判断有没有添加成功。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main(int argc, char *argv[]) {
SeqList List;
InitList(&List);
printf("%d\n", List.length);
printf("初始化成功\n");
printf("目前占用%d\n", sizeof(List.data));

appendElem(&List, 2);
appendElem(&List, 3);
printf("当前元素:%d %d\n", List.data[0], List.data[1]);
int result = appendElem(&List, 1);
if (!result) {
printf("添加元素失败\n");
return 1;
}
printf("添加元素成功\n");
printf("当前长度:%d\n", List.length);
return 0;
}

主要看到int result = appendElem(&List, 1); 这里就是让我们的result参数来保存我们appendElem()的返回值。用于我们后面的if判断。如果函数返回值为0,那么我们就代表添加失败了。

所以我们的自定义函数的返回值是用来让main函数看的。

知道了自定义函数,我们现在来看看main函数

main函数中的return

前面我们知道了自定义函数的返回值是让main函数看的。那main函数的返回值大概率是让计算机来看的。但是这两者的返回值的结果还有一点不同。

自定义函数的返回值如果是1的话,则表示成功了,如果是0的话则表示失败了。但是main函数截然相反,如果返回值的结果是0的话,则表示程序正常运行,如果是1的话才表示失败了。

所以可以看到这里

1
2
3
4
5
6
7
8
int result = appendElem(&List, 1);
if (!result) {
printf("添加元素失败\n");
return 1;
}
printf("添加元素成功\n");
printf("当前长度:%d\n", List.length);
return 0;

我们在if里面使用的返回值是1,表示我们没有正常的添加成功这个元素,然后当我们的元素成功添加之后,我们这里就会使用返回值0来告诉我们的计算机,我们这个程序正常运行没有问题。

image-20260424112927681

通过clion可以直观的看到,我们调试的函数返回值是1,那么,我们的代码就会成功的添加了这个元素。

区别

简单说就是:

自定义函数:返回给(调用者),1 往往表示成功(业务逻辑),可自由定义。

main 函数:返回给操作系统0 表示成功,非 0 表示失败,受限于系统规范。