是否有适用于C语言的解释器?

111

我在想是否有类似于C语言解释器的工具。也就是说,在Linux终端中,我可以输入“python”,然后在解释器中编写代码。这对于测试不同的东西非常有帮助,我很好奇是否存在类似于C语言的工具。虽然我表示怀疑。唯一我能想到的可能是C shell...


5
你想要的正确词汇是 "shell"(外壳)、"prompt"(提示符)或者"REPL"(Read-Eval-Print-Loop, 指四个Lisp命令必须连接在一起才能构建一个Lisp解释器),但一个解释器也可以。 - Chris Lutz
1
顺便提一下,你要寻找的术语是REPL(读取-求值-打印-循环)。 - tsimon
有没有适用于C编程的REPL? - Janus Troelsen
首选词实际上是 C 语言的 "交互" 环境。交互式环境会打开一个特定于该语言的 shell 或提示符。REPL 也不错。 - jcchuks
可以在此处找到C/C++的解释器和编译器的全面列表:https://www.thefreecountry.com/compilers/cpp.shtml - froggsy
13个回答

71

有很多 - 如果你缩小问题的范围,我们可能能够推荐一些符合你需求的特定解释器。

一个著名的解释器是《Ch: A C/C++ Interpreter for Script Computing》在Dr. Dobbs中详细介绍:

Ch是一个完整的C解释器,支持ISO C90标准的所有语言特性和标准库,但通过许多高级特性(例如字符串类型和计算数组作为一等对象)扩展了C。

Ch标准版是免费软件,但不是开源软件。只有Ch专业版具有绘图功能和其他一些功能。

我以前从未看过这个,但是随时拥有C解释器听起来非常有用,我很可能会将其添加到我的工具集中。谢谢你的问题!


编辑:

刚刚发现我的最爱编译器之一TCC可以执行C脚本:

它还可以处理C脚本文件(只需将shebang行“#!/usr/local/bin/tcc -run”添加到Linux上的C源代码文件的第一行即可直接执行)。

当使用“-”代替“infile”时,TCC可以从标准输入读取C源代码。例如:

echo 'main(){puts("hello");}' | tcc -run -

2
我希望有一个在OSI批准的许可证下可用的CH版本,这样就可以进行分发。您可以使用其解释器设计非常好的实用程序,但不幸的是它们很难捆绑。 - Tim Post
那将是很好的。免费软件总比没有好,但在有人做之前... - Adam Davis
奇怪的是,默认情况下tcc退出状态为10。看起来你必须显式地添加一个return 0,例如echo 'main(){puts("hello"); return 0;}' | tcc -run - - Greg Nisbet

18

Picoc - 一个非常小巧的C语言解释器。

PicoC是一个用于脚本编写的非常小巧的C语言解释器。最初它被编写作为一种用于飞行系统的无人机脚本语言。它也非常适合其他机器人、嵌入式和非嵌入式应用。


9

ROOT项目提供了一个非常功能强大的C和C++解释器,名为Cint。我非常喜欢它。不过需要一点时间来适应其解释性操作。

TCC也是一个非常好的选择,但我无法保证它的REPL。


1
ROOT团队不是正在逐步淘汰Cint吗? - Z boson
@Zboson "CERN已经转换到一个新的解释器,cling。CINT不再受CERN支持。" - endolith
ROOT 用 cling 替代了 cint。因此,cling 可以被视为更新的推荐选项。(尽管 - 见其他答案 - cling 是 C++,不是 C,如果相关的话,尽管我记得 cint 也有一些 C++ 的功能)。 - pseyfert

8

7

请看一下Ch解释器

Ch是一个可嵌入的C/C++解释器,用于跨平台脚本编写、shell编程、二维/三维绘图、数值计算和嵌入式脚本。


6

我知道我们在课堂上使用CINT。它似乎很好,你可以尝试一下!


5

4

cinterp 是一个很好的开始。


7
你是指 https://github.com/danielkeller/cinterp 还是 http://free-compilers.sharnoff.org/TOOL/C-12.html?提供链接会使回答更完整... - f3lix

2

ccons 似乎符合您的要求:

ccons 项目旨在为 C 编程语言创建一个交互式控制台,类似于 Python 和 Ruby 的 "python" 和 "irb"。该项目基于 clang 和 llvm 构建。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接