如何将一个代码块作为序幕添加到另一个代码块中,以便在使用 Org-Babel 进行评估时对代码块进行 noweb 风格的



在以下示例中计算fn-main时,我希望将some-fn代码附加到fn-main块的开头,以便在评估之前进行扩展。

#+NAME: some-fn
#+BEGIN_SRC C
void printother() {
printf("WOrld");
}
#+END_SRC
#+NAME: fn-main
#+BEGIN_SRC C :noweb yes :main no :prologue "<<some-fn>>"
int main() {
printother();
printf("Hello");
}
#+END_SRC

目前,对 fn-main 的评估会导致以下错误:

/tmp/ccAuvLn1.o: In function `main': C-src-5927aNL.c:(.text+0xa): undefined reference to `printother' collect2: error: ld returned 1 exit status /bin/bash: /tmp/babel-5927f7v/C-bin-5927nXR: No such file or directory 执行前最终所需的扩展块:

void printother() {
printf("WOrld");
}
int main() {
printother();
printf("Hello");
}

:noweb eval参数适用于整个块,这消除了某些块纠结和执行的可能性。它应该可以工作,但目前给了我一个错误,Wrong type argument: stringp, nil.

这似乎有效:

#+NAME: some-fn
#+BEGIN_SRC C
void printother() {
printf("WOrld");
}
#+END_SRC
#+NAME: fn-main
#+BEGIN_SRC C :noweb yes
<<some-fn>>
int main() {
printother();
printf("Hello");
}
#+END_SRC
#+RESULTS: fn-main
: WOrldHello

最新更新