/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Hvilken compiler tager fejl her?
Fra : Anders Wegge Keller


Dato : 19-10-10 22:30


Jeg er ved at konvertere noget tudsegammelt kode fra en platform til
en anden. I den forbindelse er jeg faldet over en konstruktion jeg
skulle bruge lidt tid på at gennemskue fejlen i:

typedef strum m {
struct {
word a;
word b;
} s[4];
} m;


Original kode:

doit(m *p) {
...
x = p->s.a[1];
}

Med en moderne compiler giver det en fejl:

error: request for member a in something not a structure or union

Omskriver jeg den kriminelle linie til

x = p->s[1].a;

FÃ¥r jeg i det mindste compileren til at holde mund (Der er 1200
compilefejl tilbage, før jeg kan teste det). Men jeg er kommet til at
spekulere på om originalversionen er korrekt efter K&R, eller om det
blot er endnu[1] en mangel i vores gamle compiler. Eftersom koden her
har været i produktion i 12-13 år, er der ingen tvivl om at det der er
blevet genereret har virket i et eller andet omfang. Men hvorfor?


1. En anden ting vi har fundet er at det ikke kom så nøje om man
refererede til et struct member der fandtes, blot structen var
defineret i samme headerfil som en anden struct der hade et member
med samme navn.

--
/Wegge

Leder efter redundant peering af dk.*,linux.debian.*

 
 
Mogens Hansen (20-10-2010)
Kommentar
Fra : Mogens Hansen


Dato : 20-10-10 17:34


"Anders Wegge Keller" <wegge@wegge.dk> wrote in message
news:8739s1x44u.fsf@huddi.jernurt.dk...

[8<8<8<]
> Men jeg er kommet til at
> spekulere på om originalversionen er korrekt efter K&R, eller om det
> blot er endnu[1] en mangel i vores gamle compiler.

Det må vist være en fejl i den gamle compiler - a er ikke et array.

--
Venlig hilsen

Mogens Hansen



Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409070
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste