in dem manual zur avr-libc find ich ab und zu den typ "size_t" was soll das sein ?
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.
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
> 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....
Solche Präprozessor-Wüsten lassen sich leicht ausdünnen: mal "gcc -E" laufen lassen.
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; ....
Wobei gerade der "unsigned integer type" doch ein wenig von der Zielplattform abhängig ist. Beim x86 ist sizeof(size_t) == 4;
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.
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.