Le 26/08/2014 18:24, Will Everett a écrit : > > > I believe the :includes header argument is incorrectly parsing lists > of includes for c++. This snippet: > > #+BEGIN_SRC C++ :includes <cstdio> <iostream> > using namespace std; > printf("Hello "); > cout << "world"; > #+END_SRC > > produces a compiler error: > > warning: extra tokens at end of #include directive > #include <cstdio> <iostream> > >
Here is a patch to fix the issue. The :includes, :defines, :imports headers have been extended to accept multiple items without parenthesis. All the following forms are now allowed: :includes <stdio.h> :includes <stdio.h> "strings.h" <assert> :includes '(<stdio.h> <strings.h> <assert>) :includes (mapcar (lambda (x) (concat "<std/" x ".h>")) '("abc" "def" "ghi")) (same for :imports) :defines AA 22 BB 33 :defines "AA 22 BB 33" :defines '("abc 123" "def 456") :defines (mapcar (lambda (x) (concat x " " x "_def")) '("A" "BB" "CCC")) This works either in the header as here: #+BEGIN_SRC C++ :includes <stdio.h> "strings.h" <assert> #+END_SRC or in a property drawer, like that: :PROPERTIES: :includes: <stdio.h> "strings.h" <assert> :END: Have fun Thierry
>From 63ab1d364f0e425d8d02ce946021611a1a3b7ce6 Mon Sep 17 00:00:00 2001 From: Thierry Banel <tbanelweb...@free.fr> Date: Thu, 4 Sep 2014 19:30:54 +0200 Subject: [PATCH] Enable multiple files in :includes header * ob-C.el (org-babel-C-expand-C) (org-babel-C-expand-D): :includes, :defines, :imports now accept several items separated by blanks without enclosing them in parenthesis. Thanks to Will Everett for reporting this. --- lisp/ob-C.el | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/lisp/ob-C.el b/lisp/ob-C.el index 076276e..c42ccea 100644 --- a/lisp/ob-C.el +++ b/lisp/ob-C.el @@ -186,13 +186,26 @@ it's header arguments." (let ((vars (mapcar #'cdr (org-babel-get-header params :var))) (colnames (cdar (org-babel-get-header params :colname-names))) (main-p (not (string= (cdr (assoc :main params)) "no"))) - (includes (or (cdr (assoc :includes params)) - (org-babel-read (org-entry-get nil "includes" t)))) + (includes (org-babel-read + (or (cdr (assoc :includes params)) + (org-entry-get nil "includes" t)) + nil)) (defines (org-babel-read (or (cdr (assoc :defines params)) - (org-babel-read (org-entry-get nil "defines" t)))))) - (unless (listp includes) (setq includes (list includes))) + (org-entry-get nil "defines" t)) + nil))) + (when (stringp includes) + (setq includes (split-string includes))) (setq includes (append includes '("<string.h>" "<stdio.h>" "<stdlib.h>"))) + (when (stringp defines) + (let ((y nil) + (result (list t))) + (dolist (x (split-string defines)) + (if (null y) + (setq y x) + (nconc result (list (concat y " " x))) + (setq y nil))) + (setq defines (cdr result)))) (mapconcat 'identity (list ;; includes @@ -225,7 +238,8 @@ it's header arguments." (main-p (not (string= (cdr (assoc :main params)) "no"))) (imports (or (cdr (assoc :imports params)) (org-babel-read (org-entry-get nil "imports" t))))) - (unless (listp imports) (setq imports (list imports))) + (when (stringp imports) + (setq imports (split-string imports))) (setq imports (append imports '("std.stdio" "std.conv"))) (mapconcat 'identity (list -- 1.9.1