gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:57:51 24 4
gpt4 key购买 nike

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

$ 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”文件是否没有被正确调用?

代码如下:

https://gist.github.com/rahul1346/8596118b834ecf41b1d9

有什么想法吗?

此外,您对交互器本身有何看法?

这是以 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;
}
}
}

最佳答案

有两种方法可以让你的函数结束而不返回:

  1. last>=first && in_special(first) 为真时。
  2. is_function(seg[first]) 为真时。

关于c - 获取我用 C 编写的 Lisp 解释器的流控制警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28162243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com