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