Source-Changes-D archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/lib/libc/stdio
On Mar 28, 5:24am, uwe%stderr.spb.ru@localhost ("Valeriy E. Ushakov") wrote:
-- Subject: Re: CVS commit: src/lib/libc/stdio
| On Tue, Mar 27, 2012 at 22:53:47 +0000, Christos Zoulas wrote:
|
| > In article <20120327202907.GT26108%bigmac.stderr.spb.ru@localhost>,
| > Valeriy E. Ushakov <uwe%stderr.spb.ru@localhost> wrote:
| > >
| > >But that is not what the code was. The code was:
| > >
| > > char c; if (c == CHAR_MAX) ...
| > >
| > >and *that* is portable. As I said in another mail to thsi thread that
| > >went unanswered, it is literally schizophrenic of lint to complain
| > >about it.
| >
| > How can lint know that if (c == 255) is portable? Because CHAR_MAX
| > gets expanded by cpp to 255 before lint parses the file.
|
| And this is *precisely* why it's fundamentally wrong. It's not 80s
| any more. CHAR_MAX is there for a reason.
It does not really matter. It is the compilation environment that matters,
and for that we don't even do it right, so lint has every right to warn:
[demoed with CHAR_MIN, because of easy access to machine with signed chars,
you can do the opposite test on a machine with unsigned chars]
[11:26am] 10018>cat char.c
#include <stdio.h>
#include <limits.h>
int
main(int argc, char *argv[])
{
char c = argv[0][0];
if (c == CHAR_MIN)
printf("yes\n");
return 0;
}
[11:26am] 10019>cc -funsigned-char -Wall char.c
char.c: In function 'main':
char.c:8: warning: comparison is always false due to limited range of data type
In reality I would expect a program using CHAR_MIN/CHAR_MAX to work properly
with -fsigned-char or -funsigned-char in the default compilation environment.
Yet, it does not.
christos
Home |
Main Index |
Thread Index |
Old Index