/ 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
Jeg fatter ikke dette
Fra : Jakob Bro Nielsen


Dato : 28-11-00 17:30

Nedenstående program

///----
#include <stdio.h>

unsigned long b;

void main(void)
{
b = 67044351;
printf("%d\n",b);
}
///----

udlæser 1023 - det fatter jeg ikke. Hjælp mig,

Jakob


----------------------------------------
Jakob Bro Nielsen
9200 Aalborg

fisker@kom.auc.dk



 
 
N/A (28-11-2000)
Kommentar
Fra : N/A


Dato : 28-11-00 17:42



Jakob Bro Nielsen (28-11-2000)
Kommentar
Fra : Jakob Bro Nielsen


Dato : 28-11-00 17:42

Tak for det!


Igor V. Rafienko <igorr@ifi.uio.no> skrev i en
nyhedsmeddelelse:xjvn1ekm4rf.fsf@fimm.ifi.uio.no...
> * Jakob Bro Nielsen
>
> [snip]
>
> > #include <stdio.h>
> >
> > unsigned long b;
> >
> > void main(void)
> > {
> > b = 67044351;
> > printf("%d\n",b);
> > }
> > ///----
> >
> > udlæser 1023 - det fatter jeg ikke. Hjælp mig,
>
>
> b = 67044351UL;
> printf( "%lu\n", b );
>
>
> C er _veldig_ fscked up, når det gjelder IO (det er bare Java som
> er mer udugelig på dette punktet, av alle "mainstream" språk).
>
>
>
> ivr
> --
> Partial Nudity is allowed by female users.



N/A (28-11-2000)
Kommentar
Fra : N/A


Dato : 28-11-00 18:51



Jakob Bro Nielsen (28-11-2000)
Kommentar
Fra : Jakob Bro Nielsen


Dato : 28-11-00 18:51

Du Bertel, jeg har fået det til at virke (se ovenstående svar fra Igor).

Med venlig hilsen

Jakob
AAU

Bertel Lund Hansen <nospamto@lundhansen.dk> skrev i en
nyhedsmeddelelse:noq72tgreqjpfst274fisqolq48q6qjuqj@news.tele.dk...
> Jakob Bro Nielsen skrev:
>
> >Nedenstående program
> >udlæser 1023 - det fatter jeg ikke.
>
> Der er noget galt med dit system. Hvad bruger du, og hvordan gør
> du?
>
> Bertel
> --
> http://lundhansen.dk/bertel/
> FIDUSO: http://fiduso.dk/



Claus (30-11-2000)
Kommentar
Fra : Claus


Dato : 30-11-00 00:18

Noget tyder på at du arbejder med et 16-bit system/compiler.

I så fald angiver %d en 16-bit integer.

b er 32-bit (0x3ff03ff)

printf vil benytte de nederste 16-bit til %d, 0x03ff = 1023.

Claus



"Jakob Bro Nielsen" <fisker@kom.auc.dk> wrote in message
news:v4RU5.12102$zs.327444@twister.sunsite.auc.dk...
> Nedenstående program
>
> ///----
> #include <stdio.h>
>
> unsigned long b;
>
> void main(void)
> {
> b = 67044351;
> printf("%d\n",b);
> }
> ///----
>
> udlæser 1023 - det fatter jeg ikke. Hjælp mig,
>
> Jakob
>
>
> ----------------------------------------
> Jakob Bro Nielsen
> 9200 Aalborg
>
> fisker@kom.auc.dk
>
>



N/A (30-11-2000)
Kommentar
Fra : N/A


Dato : 30-11-00 15:27



N/A (30-11-2000)
Kommentar
Fra : N/A


Dato : 30-11-00 15:27



N/A (30-11-2000)
Kommentar
Fra : N/A


Dato : 30-11-00 15:27



Thorbjørn Ravn Ander~ (30-11-2000)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 30-11-00 15:27

Byrial Jensen wrote:

> Det er et specialtilfælde af en mere generel regel: Det er
> udefineret hvad der sker hvis man kalder en funktion på en anden
> måde end den er defineret.

Øh, nå.

Så vidt jeg ved er forskellen bare om hvorvidt den kaldt funktion putter
noget i det hukommelsesområde hvor den kaldende funktion har sat plads
af.

Det skulle da ikke være nok til at aktivere alle de ting du snakker
om...

Det kritiske ved funktioner er hvorvidt den kaldte og den kaldende er
enige om størrelsen på returværdien, og ikke meget andet.

Har du et eksempel på en compiler der reagerer så drastisk som du har
nævnt tidligere i denne tråd. Ingen af de 10 stykker jeg har brugt
igennem tiden har gjort det.

--
Thorbjørn Ravn Andersen "...sound of...Tubular Bells!"
http://bigfoot.com/~thunderbear

Per Abrahamsen (30-11-2000)
Kommentar
Fra : Per Abrahamsen


Dato : 30-11-00 17:59

Thorbjørn Ravn Andersen <thunderbear@bigfoot.com> writes:

> Så vidt jeg ved er forskellen bare om hvorvidt den kaldt funktion putter
> noget i det hukommelsesområde hvor den kaldende funktion har sat plads
> af.

Du snakker "typiske implementeringer", Byrial snakker om hvad der er
garanteret af standarden. I tilfældet meget lidt.

> Det kritiske ved funktioner er hvorvidt den kaldte og den kaldende er
> enige om størrelsen på returværdien, og ikke meget andet.

void og int har ikke samme størrelse, hvilket kan føre til rod på
stakken. Eftersom returaddresser ofte gemmes på samme stack, kan den
kaldende funktion returnere til en vilkårlig adresse. På en vilkårlig
adresse kan der stå vilkårlig kode, der gør vilkårlige ting (indenfor
maskinens rammer).

Alt dette og meget mere er tilladt af standarden.

> Har du et eksempel på en compiler der reagerer så drastisk som du har
> nævnt tidligere i denne tråd. Ingen af de 10 stykker jeg har brugt
> igennem tiden har gjort det.

GCC 1 genererer programmer der crasher hvis man specificerer "void
main ()". GCC 2 kan godt regne ud at man nok mente "int main ()", og
ændrer automatisk returtypen (med en advarsel).

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste