Article View: pl.comp.lang.c
Article #1109Watcom: blad kompilatora, czy glupi standard ?
From: Arkadiusz Dabrowski
Date: Sun, 01 Feb 1998 12:29
Date: Sun, 01 Feb 1998 12:29
37 lines
1749 bytes
1749 bytes
Niedawno odkrylem dziwne zachowanie kompilatora Watcom C++ 11.0
Uznalem to za ewidentny blad.
Mianowicie:
int getb(); // to jest funkcja pobierajaca bajt z kolejki
void funckja()
{
.
.
.
int c=getb() + (getb()<<8) + (getb()<<16) + (getb()<<24);
.
.
.
}
Funkcja getb() pobiera bajty z kolejki, wiec wywolan nie mozna sobie
zamieniac miejscami. A kompilator linijke we funckji "funkcja()" tlumaczy
tak jakby byla zapisana nastepujaco:
int c=(getb()<<8) + getb() + (getb()<<16) + (getb()<<24);
Jeden kumpel powiedzial mi, ze standard nie definiuje kolejnosci wykonywania
wyrazen, wiec nalezy programowac tak, zeby sie zabezpieczac przed takimi
niespodziankami. Wydaje mi sie to straszna glupota, bo wykonywanie wyrazen
od lewej do prawej jest intuicyjne, logiczne i eleganckie.
Wiec jak to jest ? Kompilator ma buga, czy standard choro wymyslony ?
I co, z konstrukcjami typu: if(a==NULL || *a=0), ktorych uzywam nagminnie i
jak do tej pory zawsze dzialaly ?
+--\ /--\ +--\ +--\ /--\ | | Arkadiusz Dabrowski
| | | | |--< |--/ | | | | dobrov@priv.onet.pl
+--/ \--/ +--/ | \ \--/ \/ stare konto:
dobrov@zeus.polsl.gliwice.pl
Technical Details
Message-ID:
<34d4667f.42236@news.icm.edu.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!not-for-mail From: dobrov@friko.onet.pl (Arkadiusz Dabrowski) Newsgroups: pl.comp.lang.c Subject: Watcom: blad kompilatora, czy glupi standard ? Date: Sun, 01 Feb 1998 12:29:44 GMT Organization: ICM's news server Lines: 37 Message-ID: <34d4667f.42236@news.icm.edu.pl> NNTP-Posting-Host: rap-wct418.katowice.tpnet.pl Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit