org-mode – Codificación C / C ++ en babel del modo org de Emacs

Pregunta:

No encuentro muchos ejemplos / documentación para el mundo no REPL de C / C ++ en Emacs org-mode babel. Por ejemplo, ¿hay alguna manera de dividir un programa en bloques de código fuente separados, es decir, un bloque para main , luego bloques separados para su func1 , func2 , … llamado por main ? O, ¿hay alguna forma de tener una función independiente lonefunc en un bloque y luego llamarla desde otro lugar? Supongo que todo esto es una forma de programación alfabetizada, pero por lo general lo estás haciendo todo junto con enredos. Me gustaría no enredarme, pero tener cosas funcionando en la sesión en modo org.

Respuesta:

Puede hacer esto usando la sintaxis de referencia noweb:

Primero definimos algunos bloques de código con nombre

#+NAME: srcMyfunc
#+BEGIN_SRC C 
  void myfunc() {
    printf("print from function\n");
  }
#+END_SRC  


#+NAME: srcMain
#+BEGIN_SRC C
  int main(int argc,char **argv) {
    printf("Hello World\n");
    myfunc();
    exit(0);
  }
#+END_SRC

Ahora definimos un bloque que incluye los otros bloques de código haciendo referencia a ellos con la sintaxis <> (necesita la opción: noweb yes). Podríamos enredar este bloque, pero también podemos ejecutarlo directamente.

#+BEGIN_SRC C :results output :noweb yes
  #include "stdlib.h"
  #include "stdio.h"

  <<srcMyfunc>>
  <<srcMain>>

  #+END_SRC

#+RESULTS:
: Hello World
: print from function

Prefiero hacerlo de la forma en que tengo un bloque de código para combinar todos los demás, porque el <> tiende a estropear el búfer de idioma, excepto cuando solo quiero probar una función aislada.

No creo que esto sea muy útil para programas más grandes, pero lo usé mucho en un curso de programación paralelo para escribir notas y documentación.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım