trinity-devel@lists.pearsoncomputing.net

Message: previous - next
Month: November 2012

Re: [trinity-devel] tdewebdev: warning: comparison with string literal

From: Serghei Amelian <serghei@...>
Date: Thu, 1 Nov 2012 18:42:07 +0200
On Thursday 01 November 2012 18:21:22 Darrell Anderson wrote:
> I noticed the following warning when building tdewebdev:
>
> execbutton.cpp:210:55: warning: comparison with string literal results in
> unspecified behaviour [-Waddress]
>
> From what I gather the problem is trying to compare incompatible data
> types, usually strings to pointers.
>
> Somebody please review the proposed patch:
>
> ======================================
> diff -urN tdewebdev/kommander/widgets/execbutton.cpp
> tdewebdev.new/kommander/widgets/execbutton.cpp ---
> tdewebdev/kommander/widgets/execbutton.cpp	2012-10-21 13:12:11.000000000
> -0500 +++ tdewebdev.new/kommander/widgets/execbutton.cpp	2012-11-01
> 11:10:09.000000000 -0500 @@ -207,7 +207,7 @@
>        TQWidget * w;
>        while ( (w=it.current()) != 0 ) {  // for each widget...
>          ++it;
> -        if (w->name() == args[0] && w->className() == "PopupMenu")
> +        if (strcmp(w->name(), args[0]) && w->className() == "PopupMenu")
>          {
>            TQPopupMenu *popup =
> dynamic_cast<TQPopupMenu*>(w->child("unnamed", "KPopupMenu"));
> this->setPopup(popup);
> ======================================
>
> Thanks!
>
> Darrell

You reversed the sense of comparison,

strcmp(w->name(), args[0]) meaning "is not equal".

Correct: 

if (0 == strcmp(w->name(), args[0]) && w->className() == "PopupMenu")

In any case, this seems a workaround. I guess that args[0] is TQString, so the 
comparison should be valid. Try to reverse order of arguments, like:

if (args[0] == w->name() && w->className() == "PopupMenu")


-- 
Serghei