lefsaker Skrevet 25. november 2008 Del Skrevet 25. november 2008 Heisann! De siste dagene har jeg prøvd å sette meg inn i C++, og det har i den anledning dukket opp et par spørsmål som jeg ikke helt har klart å finne svaret på. Håper at noen her kan hjelpe meg litt med dette. 1. Hva er forskjellen på en litteral konstant og en symbolsk konstant? 2. Hvilken verdi får den første symbolske konstanten i en enumerasjon hvis den ikke blir spesifisert? 3. Er litterale konstanter regnet for å være r-verdier eller l-verdier? 4. Er det signerte eller usignerte heltall representere verdier som kan være negative? Lenke til kommentar
GeirGrusom Skrevet 25. november 2008 Del Skrevet 25. november 2008 (endret) 1. Hva er forskjellen på en litteral konstant og en symbolsk konstant? Aner ikke 2. Hvilken verdi får den første symbolske konstanten i en enumerasjon hvis den ikke blir spesifisert? Derivert "aner ikke" 3. Er litterale konstanter regnet for å være r-verdier eller l-verdier? Alle konstanter er vel r-verdier 4. Er det signerte eller usignerte heltall representere verdier som kan være negative? Signerte Endret 25. november 2008 av GeirGrusom Lenke til kommentar
lefsaker Skrevet 25. november 2008 Forfatter Del Skrevet 25. november 2008 Hjertlig takk Den siste virker jo logisk, men nr 3 hadde jeg måttet streve lenge med Sliter litt med 1 og 2 Lenke til kommentar
GeirGrusom Skrevet 25. november 2008 Del Skrevet 25. november 2008 Ah, nå skjønte jeg nummer 2 Den får 1, det er jo forsåvidt bare å teste da Lenke til kommentar
lefsaker Skrevet 25. november 2008 Forfatter Del Skrevet 25. november 2008 Mandig Helt ærlig så er jeg totalt blank på den første :< Lenke til kommentar
lefsaker Skrevet 25. november 2008 Forfatter Del Skrevet 25. november 2008 Fant ut nr 1. En symbolsk konstant blir representert med et navn En litteral har en verdi som skrives rett inn i programmet Lenke til kommentar
GeirGrusom Skrevet 25. november 2008 Del Skrevet 25. november 2008 Det er det jeg får for å ikke lese programmeringsbøker går jeg utifra Lenke til kommentar
zotbar1234 Skrevet 25. november 2008 Del Skrevet 25. november 2008 Ah, nå skjønte jeg nummer 2 Den får 1, det er jo forsåvidt bare å teste da Den får 0: If the first enumerator has no =, the value of its enumeration constant is 0. Each subsequent enumerator with no = defines its enumeration constant as the value of the constant expression obtained by adding 1 to the value of the previous enumeration constant. (The use of enumerators with = may produce enumeration constants with values that duplicate other values in the same enumeration.) ... det er jo forsåvidt bare å teste da. Lenke til kommentar
JeffK Skrevet 28. november 2008 Del Skrevet 28. november 2008 3. http://en.wikipedia.org/wiki/Value_(computer_science) Lenke til kommentar
LostOblivion Skrevet 3. desember 2008 Del Skrevet 3. desember 2008 (endret) Symbolske konstanter er aldri en del av selve maskinkoden etter en kompilator har kompilert programmet ditt. Før kompilatoren kompilerer kildekoden din til maskinkode, bytter den (rekursivt) ut alle symbolske konstanter med sin verdi. Det er dette som kalles preprocessing. F eks så leser gcc - #define NMSG 500 #define MSGSZ 200 #define BLOCKSZ 64 #define MAXFRAG (MSGSZ/BLOCKSZ + MSGSZ%BLOCKSZ?1:0) #define NBLOCKS (MAXFRAG*NMSG) typedef struct message { int id; int ctime; int mtime; block_t *blocks[MAXFRAG]; } message_t; typedef struct block { char data[BLOCKSZ]; } block_t; typedef struct mem { message_t msgs[NMSG]; block_t blocks[NBLOCKS]; } mem_t; Den bytter så ut alle de symbolske konstantene med sine verdier rekursivt til det ikke er fler igjen i kildekoden til den ser sånn her ut - typedef struct message { int id; int ctime; int mtime; block_t *blocks[(200/64 + 200%64?1:0)]; /* 4 */ } message_t; typedef struct block { char data[64]; } block_t; typedef struct mem { message_t msgs[500]; block_t blocks[(200/64 + 200%64?1:0)*500]; /* 2000 */ } mem_t; Og så kompilerer den. Det er nok ikke så enkelt, men i prinsippet... Endret 3. desember 2008 av LostOblivion Lenke til kommentar
GeirGrusom Skrevet 4. desember 2008 Del Skrevet 4. desember 2008 En ting jeg har lurt litt på, men aldri lurt nok på til å faktisk sjekke, vil f.eks. const int bli lagt på stacken som en vanlig variabel, eller vil den bli "limt" inn i koden som om den var preprocessor verdi? Lenke til kommentar
zotbar1234 Skrevet 4. desember 2008 Del Skrevet 4. desember 2008 En ting jeg har lurt litt på, men aldri lurt nok på til å faktisk sjekke, vil f.eks. const int bli lagt på stacken som en vanlig variabel, eller vil den bli "limt" inn i koden som om den var preprocessor verdi? Det er kompilatoravhengig. På en arkitektur der det er lett å lage store immediates OG man bruker store konstanter, ville de antageligvis bli "limt inn" i koden. På en arkitektur der å lage en stor konstant er vanskelig, så er det ikke utenkelig at den blir lagt inn som en global variabel og blir referert til som om den var en slik variabel i koden (bl.a. noen ARM-kompilatorer gjør det). Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå