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");