Vassili Karpov <[EMAIL PROTECTED]> writes:

Since this e-mail is not about gcc development, it should have been
sent to [EMAIL PROTECTED], not to [EMAIL PROTECTED]  Thanks.

> #include <string.h>
> 
> int main (int argc, char *argv[])
> {
>     char *s1 = argv[0];
>     char *s2 = strchr (s1, '/');
>     char r;
> 
>     (void) argc;
> 
>     r = s2 ? (s2 - s1) : strlen (s1);
>     return 0;
> }

> a. Why it does not err on just -Wall?

The warning is controlled by -Wsign-compare, which is turned on by
-Wextra (also known as -W) but not by -Wall.  It's not turned on by
-Wall because it is not normally a problem.

> b. Why is error message with -W what it is? instead of something like
>    what microsoft's compiler produces:
> 
>    cl /Wall /c cvscxx.c
>    cvscxx.c(11) : warning C4244: '=' : conversion from 'size_t' to 'unsigned  
>   
> char', possible loss of data

As far as I can tell, gcc does not warn about narrowing assignments.
I don't think people would object to adding such a warning, though
probably not under -Wall.  If you want to make an enhancement request,
please file it at http://gcc.gnu.org/bugzilla/.  Thanks.

> c. Why when compiled with C++ compiler there is no warning at all even with
>    -W (or even -Wextra)?

The C and C++ frontends are different.  The C++ frontend doesn't
happen to have this particular warning.  In othe words, there is no
good reason.  Again I don't think people would object to adding the
warning to C++.

> d. What is actual type of the ?: expression? ptrdiff_t? size_t?

The actual type is size_t, because in C, in an expression which uses
both a signed type and an unsigned type of the same size, the signed
type is converted to the unsigned type.

Ian

Reply via email to