C编程有REPL吗?

Sur*_*rya 39 c read-eval-print-loop

我在osx上.我发现了这个 http://neugierig.org/software/c-repl/, 但该页面上的代码链接似乎已被破坏.

gcb*_*son 21

gdb做了一个非常好的REPL.您无法在那里定义新函数,但可以计算表达式(包括具有副作用的表达式).

  • gdb 有时看起来有点挑剔......例如:`(gdb) print printf("test\n");` `当前上下文中没有符号“printf”。` 这很有趣,因为我刚刚跳过了对打印出来! (4认同)
  • 一个如何使用gdb作为回复的例子会很好. (3认同)
  • @snow啊哈 - 对你来说,gdb实际上不会作为repl工作,除非它附加到一些实际运行的进程.实现这一目标的方法不止一种.通常打破"主"在Linux上工作,但像"ls"这样的系统程序通常没有这个.以下是Centos5的工作:1)gdb/bin/ls 2)break readdir 3)运行4)打印"hello world" (3认同)
  • 如何使用 gdb 的示例: 1) `gdb /bin/ls` 2) `print "Hello world"[0]` 当然它比这更复杂......但即使是这个简单的例子也说明了一个常见的 C 习惯用法在一个repl中 (2认同)
  • 这个答案不符合我认为的答案的最低资格:`(gdb) int a = 5; 不明确的命令“int a = 5;”:内部结构、解释器执行、中断。(gdb)` (2认同)

Nik*_* B. 20

好像现在可以在Github存储库中找到c-repl的代码.这似乎是一个死的项目(最后一次提交是3年前),所以我建议也要考虑替代方案:

  • CINT
  • CCONS
  • Cling的继承者Cling,但只支持C++(可能会或可能不会出现问题,具体取决于您需要的功能)

  • 您认为其中哪一个适合使用 (2认同)

snd*_*snd 14

刚刚找到了IGCC(交互式GCC)REPL.我喜欢.

例:

./igcc

g++> int a = 1, b = 2;
g++> printf("%d\n", a + b);
3
g++> 
Run Code Online (Sandbox Code Playgroud)

它会给你编译错误,如下所示:

g++> c = 3;
[Compile error - type .e to see it.]
g++> .e
<stdin>:14:1: error: use of undeclared identifier 'c'
c = 3;
^
Run Code Online (Sandbox Code Playgroud)

(SF下载:http://sourceforge.net/projects/igcc/files/)

  • https://github.com/alexandru-dinu/igcc 有更新版本(Python 3) (2认同)