[petsc-dev] Problem with PETSC_NULL and variadic functions

Lisandro Dalcin dalcinl at gmail.com
Wed Nov 9 15:04:06 CST 2011


On 9 November 2011 17:51, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
>  To summarize:
>
>    In C we could do #define PETSC_NULL          ((void*) 0) and every thing would be fine
>

Yes, or just include stdlib.h and define to NULL.

>    In C++ this won't work and there is no alternative except a standard that is 2 months old (but for those programming in C++ this is not really a problem because there is really no need for varargs in proper C++ code).
>

No varargs in proper C++ code? What do you mean? What if you have to
access a C API (like the one in PETSc) from C++?

>  Questions:
>     1) Why won't it work in C++? Note that PETSC_NULL truly is suppose to always be used as a null pointer and should never be used as 0; if int 0 is intended then int 0 should be used.
>

Try to  cout << sizeof(PETSC_NULL) in a 64 bits machine and you will notice.

>     2) Can we at least fix it for C by using #define PETSC_NULL          ((void*) 0)  in C and using 0 in C++. After all nobody really uses PETSc from C++ :-)
>

actually, we could try to define PETS_NULL as "0" in 32bits and "0L"
in 64bits (OS X, Linux)... For WinDog 64, this does not work, I do not
remember if there is some way to specify literals for __in64 ...
perhaps ((__in64)0) would do...


-- 
Lisandro Dalcin
---------------
CIMEC (INTEC/CONICET-UNL)
Predio CONICET-Santa Fe
Colectora RN 168 Km 472, Paraje El Pozo
3000 Santa Fe, Argentina
Tel: +54-342-4511594 (ext 1011)
Tel/Fax: +54-342-4511169



More information about the petsc-dev mailing list