[petsc-dev] Problem with PETSC_NULL and variadic functions

Jed Brown jedbrown at mcs.anl.gov
Wed Nov 9 15:19:04 CST 2011


On Wed, Nov 9, 2011 at 15:15, Satish Balay <balay at mcs.anl.gov> wrote:

> <petscsys.h>
> extern void* PETSC_NULL
> <init.c>
> static void* PETSC_NULL=0L [or null or nullptr - based on configure
> determined flags]
>

You must not really mean "static".


>
> [so as to avoid language/functionality based #def() code in petscsys.h
> - that could potentially cause issues like what we had with isinf()
> stuff]
>

The problem is that C++ does not allow implicit conversion from void* to a
different pointer type. Note how PetscMalloc needs an explicit cast. It is
not possible to write

int *x = malloc(sizeof(int));

in C++, you need

int *x = (int*)malloc(sizeof(int));

If we unconditionally define PETSC_NULL to be (void*)0, then we cannot
avoid requiring the user to make that cast all over the place.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20111109/a0777269/attachment.html>


More information about the petsc-dev mailing list