#define XXXType const char* ----> #define XXXType char* ?

Lisandro Dalcin dalcinl at gmail.com
Mon Jun 23 15:51:12 CDT 2008


Barry, I do not understand what's going on with your compiler. Perhaps
my GCC is too old? (even when -Wwrite-strings is being passed ??)

I've just changed the '#define' and used the 'typedef', and PETSc
compile (configure.py ... && make) just passed without any warning...
Furthermore, 'make test' 'make testexamples' also passed just fine.

Perhaps my brain is not working well, but I do not see why all this is
an issue as long as the base PetscObject structure says 'char*
type_name'.

You can always build on a 'char*' (note: non-const) buffer what you
want, and pass it to VecSetType(), or perhaps just replace 'type_name'
in internal PETSc code.

IMHO, user-level PETSc interface should be simple, even if that iff
internally PETSc has to relax a bit the rules (ie. using a 'char*'
variable instead of a 'MatType' variable to build something like the
"seqsbaij" string from its pieces "seq", "s", "b", "aij").

Am I missing something? What do you actually want to do with 'type_name'?

On 6/23/08, Barry Smith <bsmith at mcs.anl.gov> wrote:
> > Mmm, just a bit ugly you have to add the 'const' keyword. I insist:
> > What would be the problem with ... ??
> >
> > typedef const char* VecType;
> >
>
>   Two problems.
>
>   The VecType is a const which means one cannot build them on the fly and
> copy into them etc
>
>   Second with the typedef one cannot do all the string manipulation on them.
> For example even the
>  PetscStrcpy() in PetscHeaderCreate_Private() of type_name does not work.
>
>   It would be nice to use a typedef instead of a define to build it but it
> looks impossible. (Try it,
>  just change one of them and try to compile PETSc, the screaming is
> relentless.)
>
>    Barry
>
>
>  On Jun 23, 2008, at 2:38 PM, Lisandro Dalcin wrote:
>
>
> > On 6/23/08, Barry Smith <bsmith at mcs.anl.gov> wrote:
> >
> > >
> > >  A while ago I made XXType (MatType, VecType etc) const char*
> > >
> > >
> >
> > Well, you actually did
> >
> > #define VecType const char*
> >
> > instead of
> >
> > typedef const char* VecType;
> >
> > which IMHO is the right way.
> >
> >
> > >  I now think that was a mistake.
> > >
> >
> > Yep, the '#define' way can cause problems ;-)
> >
> >
> >
> > > I'd like to change them to just  char*
> > >
> >
> > But why not the 'typedef' way ??
> >
> >
> > >  Can anyone suggest a technical reason why this is a bad idea before I
> push
> > > the code?
> > >
> > > Note this means if you have code like
> > >
> > >  VecType t = VECMPI;
> > >
> > > you would need to change it to
> > >
> > >  const VecType t = VECMPI;
> > >
> > >
> >
> >
> >
> > --
> > Lisandro Dalcín
> > ---------------
> > Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
> > Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
> > Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
> > PTLC - Güemes 3450, (3000) Santa Fe, Argentina
> > Tel/Fax: +54-(0)342-451.1594
> >
> >
>
>


-- 
Lisandro Dalcín
---------------
Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
PTLC - Güemes 3450, (3000) Santa Fe, Argentina
Tel/Fax: +54-(0)342-451.1594




More information about the petsc-dev mailing list