Re: warning: comparison with string literal results in unspecified behaviour

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Russell Shaw wrote:
Andrew Haley wrote:
Russell Shaw wrote:
How do i disable that? My code explicitly compares string pointers.

The best way is to intern all your strings.  String interning is a
fairly common efficient technique and you can look it up in Google.

I've seen that in Xlib code. There's no reason to do it if you're
not storing strings on a remote host.

Not necessarily.

I store pointers to const strings in various objects and use them
much like magic numbers, so direct pointer comparisons are the ideal
thing to do.

This warning never happened on older gcc versions.

Infact, the warning is incorrect for this valid use.

It's just unnecessary nannying.

I've been using it in thousands of lines of code for 5 years.

OK, this might be a bug in gcc.  I just looked at the gcc source
(appended below) and as far as I can see that message is only
generated when there is a real error such as

   if (str == "Hello")

Do you have a case where conforming code triggers this warning?

Andrew.


  /* Warn about comparisons against string literals, with the exception
     of testing for equality or inequality of a string literal with NULL.  */
  if (code == EQ_EXPR || code == NE_EXPR)
    {
      if ((code1 == STRING_CST && !integer_zerop (arg2.value))
	  || (code2 == STRING_CST && !integer_zerop (arg1.value)))
	warning (OPT_Waddress, "comparison with string literal results in unspecified behavior");
    }
  else if (TREE_CODE_CLASS (code) == tcc_comparison
	   && (code1 == STRING_CST || code2 == STRING_CST))
    warning (OPT_Waddress, "comparison with string literal results in unspecified behavior");


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux