This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: C: Proposal: Warning using char* a; if(a == "")
- To: Joe Buck <jbuck at synopsys dot COM>
- Subject: Re: C: Proposal: Warning using char* a; if(a == "")
- From: Martin Dalecki <dalecki at cs dot net dot pl>
- Date: Fri, 05 Nov 1999 19:23:04 +0100
- CC: gcc at gcc dot gnu dot org
- References: <199911051731.JAA00182@atrus.synopsys.com>
Joe Buck wrote:
>
> > So, I do think that the warning makes sense. A logical place to put
> > the warning would be in the truthvalue_conversion function.
>
> I see that there is already a proposed patch,
> http://egcs.cygnus.com/ml/gcc-patches/1999-10/msg00548.html
>
> Doing it in truthvalue_conversion would enable it for C, C++ and
> Objective-C, while doing it in c-typeck means it has to be done
> again for C++. I think that it's needed more in C++ than in C.
>
> As for Andrew Morton's warning against adding new warnings: in this
> particular case, if this patch caused a new warning, the users'
> code is almost certainly broken: I can't think of any programs
> where a direct comparison to the string literal can have a
> deterministic result that is not "always true" or "always false".
I will help out in this case of leak of imagination:
void gui_paned_menu_callback_function(Widget *w)
{
char *label;
label = gui_get_the_label(w);
if (label == "BANG")
printf("OK\n");
else
printf("BOOM\n");
}
int main(int argc, char *argv[])
{
Widget *item;
item = create_menu_item("BANG");
add_callback(item, gui_paned_menu_callback_function);
}
Perfectly valid C and makes perfect sense on platforms which collate
constant strings.
> My criterion for adding a new -Wall warning is as follows: are there
> useful programs where the warning cannot be suppressed without making the
> code worse, or making the programmer work hard? Or does it "cry wolf" a
> lot? If either are true, it doesn't go in -Wall. If not, and the warning
> is likely to catch errors, it does go in -Wall.
--Marcin Dalecki