[vtk-developers] possible bug in vtkErrorMacro and vtkWarningMacro

Amy Squillacote amy.squillacote at kitware.com
Fri May 25 09:56:01 EDT 2007


Thanks, Ken and Ken  :-) , for explaining why the current code is 
correct. I'll pass the information along.

- Amy

Moreland, Kenneth wrote:
> No, it shouldn't.  And if you add that, you will break a lot of code.
> If you do a grep in VTK, you will find lots of lines that look like the
> following:
>
> vtkErrorMacro(<< "Something bad happened here.");
>
> If you add in the proposed change, the hundreds of instances of this
> format will break.  The ability to add << to the beginning of the macro
> argument is nice so that you can line up the << on multi-line macros,
> much like is customary for cout.  (Note that the following example is
> meaningless unless your email viewer uses a monospace font).
>
> vtkErrorMacro(<< "Something bad happened here because "
>               << x << " is not " << y);
>
> For short error messages, it is also common to leave out the << operator
> altogether.
>
> vtkErrorMacro("Something bad happened here.");
>
> As Ken Martin just responded (as I was writing this), this works because
> the C/C++ specification states that if two string constants are next to
> each other, they get merged into a single string.  It's been an
> important feature for useful macro expansions for decades.  The only
> downside is that if your error message starts with something other than
> a string constant, you have to add the << to the beginning.  But that's
> fairly rare and easy to fix when it happens.
>
> -Ken
>
>   
>> -----Original Message-----
>> From: vtk-developers-bounces+kmorel=sandia.gov at vtk.org [mailto:vtk-
>> developers-bounces+kmorel=sandia.gov at vtk.org] On Behalf Of Amy
>>     
> Squillacote
>   
>> Sent: Friday, May 25, 2007 7:34 AM
>> To: Vtk Developers
>> Subject: [vtk-developers] possible bug in vtkErrorMacro and
>> vtkWarningMacro
>>
>> Hi All,
>>
>> Earlier today, someone pointed out to me a possible bug in
>>     
> vtkErrorMacro
>   
>> and vtkWarningMacro; see below.
>>
>> #define vtkErrorMacro(x)                        \
>>    vtkErrorWithObjectMacro(this,x)
>>
>> //
>> // This macro is used to print out errors
>> // vtkErrorWithObjectMacro(self, << "Error message" << variable);
>> //
>> #define vtkErrorWithObjectMacro(self, x)                        \
>>    {                                                            \
>>    if (vtkObject::GetGlobalWarningDisplay())                    \
>>      {                                                          \
>>      vtkOStreamWrapper::EndlType endl;                          \
>>      vtkOStreamWrapper::UseEndl(endl);                          \
>>      vtkOStrStreamWrapper vtkmsg;                               \
>>      vtkmsg << "ERROR: In " __FILE__ ", line " << __LINE__      \
>>             << "\n" << self->GetClassName() << " (" << self     \
>>             << "): " x << "\n\n";                               \
>> <----- offending line
>>     ...
>>    }
>>
>> Shouldn't the line indicated above actually be the following (adding
>> "<<" before "x")?
>> << "): " << x << "\n\n";                               \
>>
>> Similar code can also be found in the vtkWarningMacro. It looks like a
>> bug to me, but at the same time it's hard to believe that it's
>>     
> actually
>   
>> a bug because of how much those two macros are successfully used.
>> According to cvs annotate, that line has been that way since December
>> 2002. Do you think it's a bug? If not, why not?
>>
>> - Amy
>>
>> --
>> Amy Squillacote
>> Kitware, Inc.
>> 28 Corporate Drive
>> Clifton Park, NY 12065
>> Phone: (518) 371-3971 x106
>>
>> _______________________________________________
>> vtk-developers mailing list
>> vtk-developers at vtk.org
>> http://www.vtk.org/mailman/listinfo/vtk-developers
>>     
>
>
> _______________________________________________
> vtk-developers mailing list
> vtk-developers at vtk.org
> http://www.vtk.org/mailman/listinfo/vtk-developers
>
>   

-- 
Amy Squillacote
Kitware, Inc.
28 Corporate Drive
Clifton Park, NY 12065
Phone: (518) 371-3971 x106




More information about the vtk-developers mailing list