[petsc-dev] PetscCheck__FUNCT__ and PETSC_FUNCTION_NAME

Jed Brown jed at 59A2.org
Thu Oct 7 15:46:07 CDT 2010

On Thu, Oct 7, 2010 at 22:28, Satish Balay <balay at mcs.anl.gov> wrote:

> Another way of dealing with this [was discussing with Jason about it]
> - is to split of the names into 2 macros.
> #define __CLASS__ TaoVecPetsc [or TaoVecPetsc::]
> #define __FUNCT__ Clone
> So - somehow the petsc macros print out the same info Jason would like
> [TaoVecPetsc::Clone] - but internally - the check of __func__ vs
> __FUNCT__ is still done [but not the __CLASS__ part]

Hmm, the macro cannot determine whether __CLASS__ is defined, so it would
have to be defined everywhere.  Also, __func__ is as if the function had

static const char __func__[] = "FunctionName";

immediately after the opening brace.  This means that it is not a string
literal and thus cannot be concatenated by the preprocessor as in

#define PETSC_FUNCTION_NAME __CLASS__ "::" __func__

One option would be to have PETSC_FUNCTION_NAME defined to __FUNCT__ and
PetscCheck__FUNCT__ could only compare the part after the last "::".  The
problem here is that user code does not reap any benefits unless they put

#undef __FUNCT__
#define __FUNCT__ "FunctionName"

in front of all of their functions.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20101007/cb9cf9cf/attachment.html>

More information about the petsc-dev mailing list