Forum: Compiler & IDEs typ: "size_t"


von Re T. (toobatch)


Lesenswert?

in dem manual zur avr-libc find ich  ab und zu den typ "size_t"   was 
soll das sein  ?

von 123 (Gast)


Lesenswert?

Du kannst google bedienen?

von Re T. (toobatch)


Lesenswert?

wie groß (byte) ist solch eine variable im gcc

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Such mal auf deiner Platte nach *.h mit Inhalt size_t.
Evtl. findest du stddef.h, und da könnte size_t definiert sein...

Oh, Mann, aber echt.

von risu (Gast)


Lesenswert?

Hallo Lothar,

wenn's denn bloß so einfach wäre. Zeig uns doch bitte mal, wo genau Du 
in "stddef.h" ein "typedef ?? ?? size_t" findest. Es ist sicher nicht 
leicht, dort durch alle "ifdefs" (
1
_SIZE_T_DECLARED, _SIZE_T_DEFINED,
2
_SIZE_T_DEFINED_
 usw.!)zu steigen und das Gesuchte zu finden.

Aus http://www.nongnu.org/avr-libc/user-manual/group__avr__stdint.html 
geht aber durch

#define SIZE_MAX   (__CONCAT(INT16_MAX, U))
//largest value a size_t can hold.

hervor, dass die Antwort wohl "uint16_t" ist.

Gruß
 risu

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> wie groß (byte) ist solch eine variable im gcc
Na gut, wenn das Zeug so versteckt ist,
wie wärs mit dem pragmatischen Ansatz:
1
   int s = sizeof(size_t);

Woanders hatte ich z.B. sowas gefunden:
1
#ifndef  _SIZE_T_DEF
2
typedef  unsigned int  size_t;
3
#define _SIZE_T_DEF
Aber da war die Zielarchitektur auch fest vorgegeben....

von (prx) A. K. (prx)


Lesenswert?

Solche Präprozessor-Wüsten lassen sich leicht ausdünnen: mal "gcc -E" 
laufen lassen.

von Hans (Gast)


Lesenswert?

ISO/IEC 9899:1999

7.17 Common definitions <stddef.h>

The types are
....
size_t
which is the unsigned integer type of the result of the sizeof operator;
....

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wobei gerade der "unsigned integer type" doch ein wenig von der 
Zielplattform abhängig ist. Beim x86 ist   sizeof(size_t) == 4;

von Chris (Gast)


Lesenswert?

Wenn man für die AMD64-Architektur kompiliert, ist häufig sizeof(int) == 
4, aber sizeof(size_t) == 8.
Deswegen sollte man immer den geeigneten Typ verwenden und nicht 
"unsigned int" schreiben, wenn man "size_t" meint.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

size_t wird von praktisch allen Funktionen der Standardbibliothek
benutzt, die irgendwas mit der Größe eines Objekts zu tun haben.
Das Ergebnis des sizeof-Operators ist von diesem Typ, das Argument
von malloc hat diesen Typ, etc. pp.  Da zu jeder dieser Funktionen
auch eine Headerdatei gehört, die man ohnehin mit aufnehmen muss
(um den korrekten Funktionsprototypen zu erhalten), darf man einfach
davon ausgehen, dass diese Datei auch auf irgendeine Weise in der
Lage ist, die Typdefinition für size_t heranzuschaffen.

All die Verrenkungen in den Headers sind einfach nur dafür da, dass
der Typ zwar definiert wird, wenn er benötigt wird, aber nie versucht
wird, ihn zweimal zu definieren (was ein Fehler wäre).

von Xenu (Gast)


Lesenswert?

Hier noch ein interessanter Artikel zum Thema "size_t":

http://www.embedded.com/columns/programmingpointers/200900195

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.