On Fri, 1 Jul 2005, Oleg Sklyar wrote:
> Dear community,
>
> this is just a suggestion, but might be useful for the following R
> releases.
It might be useful for future suggestions if you read the relevant manual
before posting. The developers are way ahead of you on this one.
> I was programming some C code for R and my compiler constantly showed me
> some crazy messages that a stdc++ macro length() was supplied with 4
> arguments whereas only one was required. The problem could be partially
> resolved by changing the order of includes. However as soon as the file
> was used from another units, the problem reappeared. Finally, it turned
> out that length() with one argument was a macro in Rinternals.h along
> with LENGTH. So I have to use namespace specifications on the rest of my
> code, because R - length() is not protected under a namespace.
>
> The problem is however that length is a pretty common name and as any
> other very common name should be protected by a C namespace to avoid
> confusion.
There is no such thing as a `C namespace': the word does not appear in the
C99 standard.
> Therefore, the suggestion/question - wouldn't it be
> reasonable just to put the whole R includes into a unique namespace? It
> wouldn't require any modifications in the existing libraries because if
> the code is not conflicting, namespace can be omitted.
> Does it have sense?
No, as R is written in C not C++. This issue only occurs if
1) you include Rinternals.h (which was designed for C programmers), and
2) do not take notice of the warning in the `Writing R Extensions' manual
and do not define R_NO_REMAP as it suggests.
Using C++ namespaces would be of no help for C extensions to R, and we
have already provided a solution, in a back-compatible way for both C
and C++ programmers.
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595