int int-return函数可以返回true吗?

sar*_*man 5 c

这是我正在尝试编译的程序

#include<stdio.h>   
int main()
    {
        int i = 0;
        rec(i);
    }
int rec(int i)
    {
        i = i + 1;
        if (i == 10){return true;}
        rec(i);
        printf("i: %d\n", i);
    }
Run Code Online (Sandbox Code Playgroud)

我得到了这个输出

$ gcc -o one one.c
one.c: In function ‘rec’:
one.c:10:24: error: ‘true’ undeclared (first use in this function)
one.c:10:24: note: each undeclared identifier is reported only once for each function it appears in
Run Code Online (Sandbox Code Playgroud)

到目前为止我认为是布尔值,在c中评估为1.如果是这样,为什么我会收到错误?

pax*_*blo 11

C 中没有true或没有false关键字.这些值有一些定义stdbool.h(从C99开始,我认为),但有时大多数C程序员只会使用10.

如果您不想使用stdbool.h,或者您正在使用不支持它的编译器,您通常可以自己定义常量,例如:

#define FALSE (1==0)
#define TRUE  (1==1)
Run Code Online (Sandbox Code Playgroud)

或者您可以使用10直接-上面的方法是为那些不想要记住谁该整数值适用的真值(A) .

0是假的,任何其他值都是真的.所以你的代码看起来像(修复返回值问题,虽然我不确定为什么它甚至存在,因为它总是返回true.):

#include <stdio.h>   

int rec (int i) {
    i = i + 1;
    if (i == 10)
        return 1;
    printf ("i: %d\n", i);
    return rec (i);
}

int main (void) {
    int rv, i = 0;
    rv = rec (i);
    printf ("rv: %d\n", rv);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给你:

i: 1
i: 2
i: 3
i: 4
i: 5
i: 6
i: 7
i: 8
i: 9
rv: 1
Run Code Online (Sandbox Code Playgroud)

我还应该提到递归是一种在搜索空间快速减少时最好使用的解决方案,例如在二叉树搜索中,搜索空间在每次递归调用时减半.它通常不适合你只是在每次调用时增加一个值的东西,但在这种情况下,它可能没问题,因为你将它限制在大约十个级别.


(a):请记住,尽管给定的TRUE定义最多为1,但任何非零值都将被处理.这意味着这两个陈述:

if (isValid)
if (isValid == TRUE)
Run Code Online (Sandbox Code Playgroud)

不要意味着同样的事情.有大量可能的isValid值将通过第一次测试但未通过第二次测试.这通常不是问题,因为无论如何将布尔变量与布尔常量进行比较几乎总是一个坏主意.