Mail Archives: djgpp/2001/01/30/15:36:34
Jason Green <news AT jgreen4 DOT fsnet DOT co DOT uk> schrieb Folgendes:
>
> > > It compiles cleanly like this:
> > >
> > > int main(void)
> > > {
> > > char *p = 0;
> > > *p = 'X';
> > >
> > > return 0;
> > > }
>
> > > > And I do not think clean code can contain a line which can produce many
> > > > errors that result in SIGSEGV but gives no hint about it.
> > >
> > > Try stepping up the warnings you have enabled. I don't think it's
> > > possible for gcc to flag bugs like in the above example but it might
> > > show up some other problem with your code.
> >
> > Perhaps it can flag this one when optimizing.
>
> Not when I tried, although lint might catch this.
>
> One reason gcc misses it may be that all-bits-zero pointer is valid on
> some platforms (I think). Feel free to suggest this to the gcc
> maintainers though.
> My point though was not regarding the example code. I am merely
> suggesting to up the warning level to something more extreme when
> compiling the problem code, in order to see how clean it really is and
> perhaps weed out a bug. I should add that of course I don't know what
> warnings you are using (and so what you mean by clean code) - maybe
> you already did this.
no -W switch, the only warnings I accept are about implicit conversions
between int and double since an explicit typecast for such a conversion
(static_cast) looks terrible. Since I often use long double and I do not
like C cast notation, but long double a = long double (b) does not work, I
consequently cast implicitly between the both.
Of course I try to raise the warnings (-Wall) to find errorneous code that
I do not find when debugging. But I am tired of a bug in RHIDE that often
causes problems when using -Wall:
template <class C> C intconv (C c)
{
int i = c;
return i;
}
int main ()
{
intconv (1.2);
return 0;
}
compiles when warnings are off, compiles from console when warnings are
on, but RHIDE says:
Compiling: x.cpp
In function `double intconv<double>(double>':
x.cpp (9) Error: instantiated from here
x.cpp (3) Warning: initialization to `int' from `double'
There were some errors
gcc says:
x.cpp: In function `double intconv<double>(double)':
x.cpp:9 instantiated from here
x.cpp:3 warning: initialization to `int' from `double'
> I'm kinda loosing the thread here, are you saying you only get SIGSEGV
> under Windows ME? Did you try your program under real-mode DOS (from
> boot floppy)?
With the DOS mode patch, I get the correct messages (not every time a
GPF).
--
Nuper erat medicus, nunc est vispillo, Diaulus:
Quod vispillo facit, fecerat et medicus.
- Raw text -