为我用C编写的Lisp解释器获取流控制警告

为我用C编写的Lisp解释器获取流控制警告,c,lisp,C,Lisp,我一直在研究SICP,并尝试创建一个LISP Interprerater。我不断收到以下警告: $ make littleLisp cc littleLisp.c -o littleLisp littleLisp.c:309:1: warning: control may reach end of non-void function [-Wreturn-type] } ^ 1 warning generated. $ make littleLisp make: `littleLisp

我一直在研究SICP,并尝试创建一个LISP Interprerater。我不断收到以下警告:

$ make littleLisp
cc     littleLisp.c   -o littleLisp
littleLisp.c:309:1: warning: control may reach end of non-void function [-Wreturn-type]
}
^
1 warning generated.
$ make littleLisp
make: `littleLisp' is up to date.
$ ./littleLisp 
warning: this program uses gets(), which is unsafe.
5.000000
我不太确定这是指什么,因为我的主要方法是返回0。是否未正确调用我的“in.lisp”文件

代码如下:

有什么想法吗

另外,你对Interperator本身有什么看法

以下是结束于309的fxn:

long interpret_list(long scope, long first, long last) {
    parent[first] = scope;
//  printf("interpret_list %d %d %d\n", scope, first, last);
    long i, j, brace;
    if (last>=first && in_special(first)) {
//      puts("OK");
        special(scope, first, last);
    } else {
        child_count[scope] = 0;
        i = j = first; brace = 0;
        while ( i <= last) {
            if (!strcmp(seg[i], "(")) brace++;
            if (!strcmp(seg[i], ")")) brace--;
            if (brace == 0) {
                interpret(scope, j, i);
                child[scope][child_count[scope]++] = j;
                j = i + 1;
            }
            i++;
        }
        if (brace) {
//          puts("Format error!!");
            exit(2);
        }
        if (is_function(seg[first])) {
            apply_function(seg[first], scope);
        } else {
            return scope;
        }
    }
}
长解释列表(长范围、长首、长尾){
父[第一]=范围;
//printf(“解释列表%d%d%d\n”,范围,第一个,最后一个);
长i,j,括号;
如果(最后一次>=第一次&在特殊情况下(第一次)){
//卖出(“OK”);
特殊(范围、第一、最后);
}否则{
子项计数[范围]=0;
i=j=第一个;大括号=0;

而(i有两种方法可以使函数在不返回的情况下从末尾脱落:

  • last>=first&&in_special(first)
    为真时
  • 为时,函数(seg[first])
    为真

  • 有两种方法可以使函数在不返回的情况下结束:

  • last>=first&&in_special(first)
    为真时
  • 为时,函数(seg[first])
    为真

  • 有两种方法可以使函数在不返回的情况下结束:

  • last>=first&&in_special(first)
    为真时
  • 为时,函数(seg[first])
    为真

  • 有两种方法可以使函数在不返回的情况下结束:

  • last>=first&&in_special(first)
    为真时
  • 为时,函数(seg[first])
    为真


  • 查看“LittleLisp.c”第309行结束的函数。哦,找到您使用的
    获取的位置
    ,并将其替换为其他选项(例如,
    fgets
    ).它正在返回作用域?存在不返回值的路径。知道我为什么会得到GET错误吗?我使用fgets,但它仍然会出错…有什么想法吗?看看“LittleLisp.c”第309行结束的函数。哦,找到您使用的
    gets
    的位置,并用其他方法替换它(例如,
    fgets
    ).它正在返回作用域?存在不返回值的路径。知道我为什么会得到GET错误吗?我使用fgets,但它仍然会出错…有什么想法吗?看看“LittleLisp.c”第309行结束的函数。哦,找到您使用的
    gets
    的位置,并用其他方法替换它(例如,
    fgets
    ).它正在返回作用域?存在不返回值的路径。知道我为什么会得到GET错误吗?我使用fgets,但它仍然会出错…有什么想法吗?看看“LittleLisp.c”第309行结束的函数。哦,找到您使用的
    gets
    的位置,并用其他方法替换它(例如,
    fgets
    )。这是返回范围?存在不返回值的路径。知道我为什么会出现gets错误吗?我使用fgets,但它仍然会出错…有什么想法吗?抱歉,我没有遵循?正如我在回答中所指出的,函数中有两个位置具有
    if
    。只有当这两个条件都为false时,
    才会返回到达cope
    行。抱歉,我没有跟随?正如我在回答中所指出的,在函数中有两个位置具有
    if
    。只有当这两个条件都为false时,才会到达
    返回范围
    行。抱歉,我没有跟随?在函数中有两个位置具有
    if
    哼哼,正如我在回答中所指出的。只有当这两个条件都为false时,
    返回范围
    行才会到达。对不起,我没有跟上?正如我在回答中所指出的,在函数中有两个地方有
    if
    。只有当这两个条件都为false时,
    返回范围
    行才会到达取得联系。