c - 这个 C int 函数在没有 return 语句的情况下如何工作?

标签 c recursion return

我有这段 C 代码,我确信它不会工作,但它确实有效。

#include <stdio.h>

int* find (int* a, int val) {
    if (*a == val)
        return a;
    else
        find(a+1, val);
}

int main() {
    int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int *b;

    b = find(a, 7);

    printf("%d\n", *b);

    return 0;
}

当然,我收到了 gcc 的警告,因为它在 find 函数的 else 分支中缺少 return 语句。但是,它工作得很好。

为什么会这样?它怎么知道通过递归函数返回一个int呢?当然,最后一次调用返回一个 int,但我是在 void 上下文中调用它。

最佳答案

此代码不是有效的 C 代码,此类代码的行为未定义。

它起作用的一个原因可能是在find中最后一次调用之后没有操作,这可能导致递归调用的返回值停留在return中注册(可能是eax)。

但同样 - 行为未定义

关于c - 这个 C int 函数在没有 return 语句的情况下如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14753444/

相关文章:

javascript - 从自然数翻转 0's and 1' s

java - 如何使用递归检查数组中的所有值是否相等?

c++ - 如何返回对 'empty' 对象的引用

C# 字典返回类型

c - Memset 结构指针导致空检查失败

c++ - 理解以下来自CSAPP的汇编代码

c - 如何扫描一个字符串、一个管道,然后扫描另一个字符串,中间没有任何中断/空格?

java - 机器人的所有可能路径

android - 视频播放后返回应用

c - 如何使用fscanf读取一行解析成变量?