<div class="gmail_quote">On Thu, Oct 7, 2010 at 22:28, Satish Balay <span dir="ltr"><<a href="mailto:balay@mcs.anl.gov">balay@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div id=":3v4">Another way of dealing with this [was discussing with Jason about it]<br>
- is to split of the names into 2 macros.<br>
<br>
#define __CLASS__ TaoVecPetsc [or TaoVecPetsc::]<br>
<br>
#define __FUNCT__ Clone<br>
<br>
So - somehow the petsc macros print out the same info Jason would like<br>
[TaoVecPetsc::Clone] - but internally - the check of __func__ vs<br>
__FUNCT__ is still done [but not the __CLASS__ part]</div></blockquote></div><br><div>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</div>
<div><br></div><div><font class="Apple-style-span" face="'courier new', monospace">static const char __func__[] = "FunctionName";</font></div><div><br></div><div>immediately after the opening brace.  This means that it is not a string literal and thus cannot be concatenated by the preprocessor as in</div>
<div><br></div><div><font class="Apple-style-span" face="'courier new', monospace">#define PETSC_FUNCTION_NAME __CLASS__ "::" __func__</font></div><div><br></div><div>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</div>
<div><br></div><div>#undef __FUNCT__</div><div>#define __FUNCT__ "FunctionName"</div><div><br></div><div>in front of all of their functions.</div><div><br></div><div>Jed</div>