在Emacs中单步执行C程序

时间:2016-12-24 18:44:54

标签: c emacs zsh

我是Emacs 的新手,我想在一个单独的窗口中使用eshell执行C程序(顶部带有C文件的窗口和带有eshell的底部窗口;用Cx来回切换o)。不幸的是,我必须在eshell中编写gcc program.c -o program然后./program

在我的.zshrc中我有一个别名

c () {
  gcc $1 && ./a.out
}

这意味着在普通终端我可以运行c program.c,将两个步骤合二为一。但是,当然,eshell并没有阅读.zshrc。那么如何编写一个elisp文件来完成同样的事情呢?

2 个答案:

答案 0 :(得分:3)

这是我多年来一直在努力的事情。添加Emacs标题行,如以下示例所示:

/* -*- mode: C++; compile-command: "gcc -s -O3 termcolor.c -o termcolor; ./termcolor" -*- */

#include <stdio.h>

int main (void) {
  printf("[0;34;41mHello world![m\n");
  printf("[5;34;41mHello world![m\n");
  printf("[1;5;34;41mHello world![m\n");

  return 0;
}     

我让C-x c别名来调用M-x compile(至少在C ++模式下,我在这里也设置了,即使它在技术上是一个C文件),所以它会调用compile-command这里指定的......包括执行。

所以几乎立刻就得到了

-*- mode: compilation; default-directory: "/tmp/" -*-
Compilation started at Sat Dec 24 13:22:23

gcc -s -O3 termcolor.c -o termcolor; ./termcolor
[0;34;41mHello world![m
[5;34;41mHello world![m
[1;5;34;41mHello world![m

Compilation finished at Sat Dec 24 13:22:24
编译缓冲区中的

。对我来说效果很好。

答案 1 :(得分:0)

只需进入eshell并输入alias c 'gcc $1 && ./a.out'

即可