To the C/C++ gurus here:

Because of all the gcc warnings and g++ errors (more about that later)
I was getting unless I used explicit casts with e.g, const PLFLT **
arguments I became concerned that perhaps I was misinterpreting the
meaning of

const PLFLT ** z;

Some googling this morning found the answer at
http://stackoverflow.com/questions/336585/what-does-a-const-pointer-to-pointer-mean-in-c-and-in-c
The discussion there pointed to
http://c-faq.com/decl/spiral.anderson.html which I think you will all
find an interesting read.  Both sources confirm my original
interpretation was correct.

The answer is z is a mutable pointer to a mutable pointer to an
immutable PLFLT.  Therefore, such declarations for our function
arguments claim that our functions are not changing the values of the
doubly dimensioned z array which I believe is exactly what we want.
Similarly,

const PLFLT *x;

arguments for our functions claim that our functions are not changing
the values of the singly dimensioned x array which again I believe is
exactly what we want.

The above is useful background to the fundamental issue that bothers
me which is automatic casting from mutable to immutable of singly
dimensioned and doubly dimensioned arrays are treated quite
differently by both gcc and g++.

For an example of this with plline3, see examples/c/x18c.c where
mutable x, y, and z singly dimensions array arguments are
automatically cast to immutable without a warning message.  I think
that lack of warning message is the correct thing to do since
obviously x, y, and z must be assigned values before calling plline3
so it makes no sense for gcc to warn about the automatic casting of
each of those PLFLT * arrays to const PLFLT *.  However, such sanity
does not prevail for the doubly dimensioned array case; there you must
explicitly use (const PLFLT **) casts to avoid warning messages from
the gcc C compiler and error (!) messages from the gcc C++ compiler
for the doubly dimensioned arrays, see examples/c/x11c.c and
examples/c++/x11.cc.

Does any C/C++ guru here know how to avoid those explicit casts for
each of our doubly dimensioned arguments?  I don't think I should
revert the const project since there are reasons of documentation and
safety to justify it (see
http://www.cprogramming.com/tutorial/const_correctness.html).
Nevertheless, if those explicit casts are required it will be
inconvenient for our users so if it is possible to avoid that work,
let's help at least our new users out with good examples.

Note, this doubly dimensioned issue may be just a quirk with gcc and
g++ being inconveniently restrictive about automatic casting from
PLFLT ** to const PLFLT** without a warning (gcc) or error (g++)
message, and other C and C++ compilers may have different quirks or
errors concerning the interpretation of const.  So it would be a good
idea for those here with access to non-gcc compilers to run the
test_diff_psc target with BUILD_TEST=ON and report back all warning or
error messages that are related to our const arguments.

Better to find out now about any platform problems introduced by the
const modifier project rather than one day after our next release!

Alan
__________________________
Alan W. Irwin

Astronomical research affiliation with Department of Physics and Astronomy,
University of Victoria (astrowww.phys.uvic.ca).

Programming affiliations with the FreeEOS equation-of-state implementation
for stellar interiors (freeeos.sf.net); PLplot scientific plotting software
package (plplot.org); the libLASi project (unifont.org/lasi); the Loads of
Linux Links project (loll.sf.net); and the Linux Brochure Project
(lbproject.sf.net).
__________________________

Linux-powered Science
__________________________

------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
Plplot-devel mailing list
Plplot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to