I would like to return an empty list from a C function. This I would do as: if (file.exists()) { /* do something */ } else { SEXP empty_list; PROTECT(empty_list = NEW_LIST(0)); UNPROTECT(1); return empty_list; } The PROTECT, UNPROTECT lines seemed like overkill to me, but as far as I understood the documentation this seemed like the correct usage. It seems like I could really just do the following: return NEW_LIST(0); but I thought I'd better ask first. Thanks in advance, I hope I did not miss something in the documentation which describes this. Thanks, jim -- James Bullard bullard@berkeley.edu 760.267.0986
James Bullard wrote:> I would like to return an empty list from a C function. This I would do as: > > if (file.exists()) { > /* do something */ > } > else { > SEXP empty_list; > PROTECT(empty_list = NEW_LIST(0)); > UNPROTECT(1); > return empty_list; > } > > The PROTECT, UNPROTECT lines seemed like overkill to me, but as far as I > understood the documentation this seemed like the correct usage. It > seems like I could really just do the following: > > return NEW_LIST(0); > > but I thought I'd better ask first. Thanks in advance, I hope I did not > miss something in the documentation which describes this.You can use the short form in this case. You need to PROTECT an SEXP whenever you do further operations that may trigger a garbage collection but in this case there are no such further operations. Depending on what you are going to do with the returned value it may be simpler to use return R_NilValue; which returns NULL.