/ 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
Type sikring
Fra : Klaus Petersen


Dato : 29-10-03 22:00

Hej NG.

Hvordan laver man egentlig sine variabler type sikre?

Dvs. sørger for at en integer altid er 32 bits

Klaus.



 
 
Kasper Laudrup (29-10-2003)
Kommentar
Fra : Kasper Laudrup


Dato : 29-10-03 22:34

I structs kan man fx skrive:

struct my_struct {
   int my_int:32;
};

Netop i structs vil oversætteren dog ofte optimere fx. så hvert
element fylder 32 bit på en 32 bit arkitektur selvom der er tale om fx. en
char. Hvis du compiler med gcc kan man skrive:

struct my_struct {
   unsigned char my_char:8;
   int my_int:32;
}__attribute__((packed));

Håber det kan bruges,

Kasper

On Wed, 29 Oct 2003 22:00:25 +0100, Klaus Petersen wrote:

> Hej NG.
>
> Hvordan laver man egentlig sine variabler type sikre?
>
> Dvs. sørger for at en integer altid er 32 bits
>
> Klaus.


Byrial Jensen (29-10-2003)
Kommentar
Fra : Byrial Jensen


Dato : 29-10-03 22:54

Klaus Petersen wrote:
> Hej NG.
>
> Hvordan laver man egentlig sine variabler type sikre?
>
> Dvs. sørger for at en integer altid er 32 bits

#include <stdint.h>

/* Disse typer har præcis 32 bit. Der er ingen garanti for at de findes,
men de skal være definerede hvis C-implementationer har
32-bit-heltalsvariabler. */
int32_t i32; // signed
uint32_t u32; // unsigned

/* Disse typer er de typer med færrest bit som har mindst 32 bit. De
skal findes. */
int_least32_t il32; // signed
uint_least32_t ul32; // unsigned

/* Disse typer er de typer med mindst 32 bit som det generelt er
hurtigst at arbejde med. De skal findes. */
int_fast32_t if32; // signed
uint_fast32_t uf32; // unsigned


Rasmus Christian Kaa~ (30-10-2003)
Kommentar
Fra : Rasmus Christian Kaa~


Dato : 30-10-03 07:09

> #include <stdint.h>
>
> /* Disse typer har præcis 32 bit. Der er ingen garanti for at de findes,
> men de skal være definerede hvis C-implementationer har
> 32-bit-heltalsvariabler. */
> int32_t i32; // signed
> uint32_t u32; // unsigned
>
> /* Disse typer er de typer med færrest bit som har mindst 32 bit. De
> skal findes. */
> int_least32_t il32; // signed
> uint_least32_t ul32; // unsigned
>
> /* Disse typer er de typer med mindst 32 bit som det generelt er
> hurtigst at arbejde med. De skal findes. */
> int_fast32_t if32; // signed
> uint_fast32_t uf32; // unsigned

Når du nu inkluderer stdint.h og ikke decideret putter mere syntax på de
allerede eksisterende typer, hvorfor definerer du så dine egne aliasser?


Byrial Jensen (30-10-2003)
Kommentar
Fra : Byrial Jensen


Dato : 30-10-03 17:56

Rasmus Christian Kaae wrote:

> Når du nu inkluderer stdint.h og ikke decideret putter mere syntax på de
> allerede eksisterende typer, hvorfor definerer du så dine egne aliasser?

Jeg definerer da ingen aliaser. Jeg erklærer 6 variabler med 6
forskellige typer for at illustere disse typer.


Bertel Brander (29-10-2003)
Kommentar
Fra : Bertel Brander


Dato : 29-10-03 23:27

Klaus Petersen wrote:

> Hej NG.
>
> Hvordan laver man egentlig sine variabler type sikre?
>
> Dvs. sørger for at en integer altid er 32 bits
>

Der er ingen garanti for at kompileren har en 32 bit integer type,
den kan have 11 bit char, 22 bit short, 44 bit int og 88 bit long.

I C99 har man tilføjet uint32_t og int32_t, men der er ingen krav
til at kompileren understøtter disse.

Man kan naturligvis lave en c++ klasse til at emulere det, men
hastigheden kan blive et problem.

Man kan ikke lave bit-fields med long, så der er ingen garanti for
at man kan lave en 32 bit bit-field.

/b


Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408186
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste