size_t?

Diskutiere size_t? im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Was ist eigentich size_t, welche Werte kann man darin speichern, und wie kann man selbst so einen Datentyp entwerfen?

  1. enr00

    enr00 Routinier

    Dabei seit:
    08.04.2007
    Beiträge:
    275
    Zustimmungen:
    0
    Ort:
    Luxemburg
    Was ist eigentich size_t, welche Werte kann man darin speichern, und wie kann man selbst so einen Datentyp entwerfen?
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 smg, 10.07.2007
    Zuletzt bearbeitet: 10.07.2007
    smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    size_t sollte nur ein typedef sein, iirc, also:
    Code:
    typedef unsigned long size_t;
     
  4. #3 Mµ*e^13.5_?¿, 10.07.2007
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    size_t ist nach dem ANSI-C-Standard der Datentyp, in dem Längen von Strings und anderen Speicherbereichen angegeben werden sollen.
    Also für gewöhnlich wird size_t wie folgend definiert:
    typedef unsigned long size_t;
    Was du darin speichern kannst, hängt von der Architektur ab, bei mir ist er 4 Bytes lang, ich kann also darin Ganzzahlen von 0 bis 4294967295 speichern.
    Wie man eigene Datentypen definiert hat sich damit auch erledigt, oder?
     
  5. enr00

    enr00 Routinier

    Dabei seit:
    08.04.2007
    Beiträge:
    275
    Zustimmungen:
    0
    Ort:
    Luxemburg
    Thx

    Jo, thx...
     
  6. #5 oiermann, 23.03.2009
    oiermann

    oiermann besserwisser

    Dabei seit:
    03.10.2006
    Beiträge:
    12
    Zustimmungen:
    0
    Ort:
    Leutkirch
    Wenn auch schon ein wenig älter, aber trotzdem meine Frage.

    Gibt es irgendwo Listen, in denen solche Definitionen ALLE (dem Standard entsprechend) drin sind?
     
  7. Akendo

    Akendo 4k3nd0

    Dabei seit:
    05.02.2008
    Beiträge:
    399
    Zustimmungen:
    0
  8. #7 oiermann, 23.03.2009
    oiermann

    oiermann besserwisser

    Dabei seit:
    03.10.2006
    Beiträge:
    12
    Zustimmungen:
    0
    Ort:
    Leutkirch
    Ich meine nicht die Funktionen und Header Beschreibungen, sondern Sachen wie
    Code:
    typedef unsigned long size_t;
    PS: I didn't
     
  9. #8 T-Virus, 23.03.2009
    Zuletzt bearbeitet: 23.03.2009
    T-Virus

    T-Virus Free Software Fan :p

    Dabei seit:
    06.01.2009
    Beiträge:
    107
    Zustimmungen:
    0
    Ich kann bei dem Thema, als Hobbyentwickler der mit C++ angefangen hat, nur empfehlen viel Code lesen.
    Mit der Zeit kommen solche gebilde immer mal wieder :)
    Vor allem wenn man mit der C++ STL arbeitet, egal ob beruflich oder nicht, man findet bei strings viele solcher Sachen :)

    Ansonsten kann man eigene Datentypen eher mit structs erzeugen.
    typedef ist eher dazu da um alten Datentypen neue Namen zu verpassen.
    Bei einigen Dingen wie bei size_t ist dies auch okay.
    Aber eigene komplexe Datentypen kann man nicht mit typedef abbilden.
    Hier bräuchte man schon structs.
    In C++ kann man diese eigentlich weglassen und gleich Klassen nutzen.
    Aber als Datentypen sind structs doch immer nützlich :)

    Anbei noch einmal zum Thema typedef.
    Ich würde dir auch empfehlen, wenn du solche typedefs im C Standard suchst, dann lies mal einige der C Header durch.
    Dort sind die ganzen typedefs passend verteilt :)

    Bzw. kann dir auch OpenGL viele typedefs bieten.
    Dort gibt es zu jedem Datentyp, egal ob int char whatever, ein typedef.
    Diese sehen dann wie GLFloat, GLDouble etc. aus.
    Kenne die jetzt nicht genau also das Beispiel nicht so ernst nehmen ^^

    Okay heir ein passendes Beispiel:
    http://www.koders.com/cpp/fid46C0152428EBEB242EBF7D3F640B0B8AFDD8FB97.aspx?s=cdef:opengl

    unter der C WinAPI gibt es auch sachen wie WORD etc. als Datentypen :p
     
  10. #9 oiermann, 23.03.2009
    oiermann

    oiermann besserwisser

    Dabei seit:
    03.10.2006
    Beiträge:
    12
    Zustimmungen:
    0
    Ort:
    Leutkirch
    Vielen Dank :)
    Naja, eine Liste soll ja das Header durchforsten abstellen ;) Aber mal sehen...
    Das ist doch auch gut so, ein word ist ein 16 Bit wert, zwei Bytes.
     
  11. #10 Gott_in_schwarz, 23.03.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Code:
    egrep '^typedef .+ [a-zA-Z]+_t;$' /usr/include/* -R
     
  12. Akendo

    Akendo 4k3nd0

    Dabei seit:
    05.02.2008
    Beiträge:
    399
    Zustimmungen:
    0
    Wo ist den unter Windows den /usr/include/ :-)?

    so far
    MFG 4k3nd0
     
  13. daboss

    daboss Kaiser

    Dabei seit:
    05.01.2007
    Beiträge:
    1.297
    Zustimmungen:
    0
    Ort:
    bavaria.germany.europe.world
    Guggst du "Start|Suchen" und suchst bspl.-weise nach der stdio.h oder so :P
    ...oder bei den Einstellungen deiner IDE...
     
  14. Krotti

    Krotti Foren As

    Dabei seit:
    01.03.2007
    Beiträge:
    79
    Zustimmungen:
    0
    Off Topic

    Häh ?

    Alter Datentyp == Basisdatentyp...wieso alt ?
    (Nur) Bei einigen Dingen...?

    Beispiel: Definition
    Code:
    // vorausgesetzt char, short, long, usw. sind tatsächlich auf der Ziel Architektur so lang --> für nähere Details --> limits.h
    typedef unsigned char  u08;
    typedef   signed char  s08;
    typedef unsigned short u16;
    typedef   signed short s16;
    typedef unsigned long  u32;
    typedef   signed long  s32;
    typedef unsigned long long u64;
    typedef   signed long long s64;
    // wobei hier Namen wie u08_t, s08_t, u16_t, usw. verständlicher wären...
    // ist aber Geschmackssache...
    (So ähnliche Definitionen befinden sich zum Beispiel in stdint.h.)
    Ich brauch anschließend nicht mehr unsigned char [varName] schreiben. u08 [varName] reicht. :)

    Beispiel: Anwendung
    Code:
    u08 variableOhneVorzeichen8Bit = 217;
    s08 variableMitVorzeichen8Bit = -37;
    u16 variableOhneVorzeichen16Bit = 516;
    // usw. ...
    Imho recht nützlich wenn der verwendete Editor keine Autovervollständigung (IntelliSense...so nennt es MS) kann.

    typedef funktioniert auch bei Strukturen, Unions, Klassen (C++)...
    Beispiel: Definition
    Code:
    typedef struct str_Time
    {
    	
       u08 hours;
       u08 minutes;
       u08 seconds;		
       u16 year;
    
    } str_Time_T;
    Beispiel: Anwendung
    Code:
    str_Time_T zeit = {08, 18, 00, 2009}
    Cool oder ? ;)

    Zusammenfassend:
    Typdef ist eine nette Funktion mit der ich fauler Programmierer mir die Schreibarbeit verkürzen kann... :D

    Hat aber imho auch Schattenseiten...der Code könnte für Andere dadurch schwerer zu lesen/verstehen sein...deswegen wahrscheinlich oiermanns Frage...

    Ich würde eher fragen: "Ist egrep standardmäßig bei Windows installiert ?" ;)
    Wobei unter Unix/Linux Systemen auch nicht alle Header-Dateien unter /usr/include installiert werden...

    :)
     
  15. Akendo

    Akendo 4k3nd0

    Dabei seit:
    05.02.2008
    Beiträge:
    399
    Zustimmungen:
    0
    Windows suche....? Geht nicht :P
    Dazu Ironie /off
     
  16. #15 Krotti, 24.03.2009
    Zuletzt bearbeitet: 24.03.2009
    Krotti

    Krotti Foren As

    Dabei seit:
    01.03.2007
    Beiträge:
    79
    Zustimmungen:
    0
    Off Topic

    Auch wenn mich manche jetzt als Verräter oder Sonstiges (Troll, etc.) bezeichnen...

    Nicht falsch verstehen:

    Ich benutze sehr gerne Unix/Linux Systeme. Ich werde höchstwahrscheinlich auch nie wieder ein Windows System als Hauptbetriebssystem verwenden...
    Aber hier muss ich Windows (zumindestens die Win XP Suchfunktion) verteidigen:

    Gilt für kfind (KDE 3.5.9, höhere Versionen -> kA...noch nicht verwendet):

    Wenn ich diese Variante von kfind mit der Windows Suchfunktion vergleiche, hilft nur folgendes :devil::
    Code:
    $ rm -f /opt/kde3/bin/kfind
    Klingt zwar hart, aber ich kann prinzipiell keine Programme leiden, bei der die Benutzeroberfläche sehr oft eine längere Zeit (>1 Minute) einfriert.
    Tritt auf wenn man das komplette Dateisystem (file:///) durchsucht, nach einer gewissen Zeit auf Anhalten klickt und danach das Programm schließen will.
    Es geht zwar das Programm schneller zu beenden (CTRL + ALT + ESC oder "killall kfind")...ist aber nicht wirklich sauber..

    Naja, mal sehen ob die höheren Versionen besser sind...falls nicht, versuch ich kfind halt mal selber optimieren...sofern ich halt Zeit habe...
    Derweil verwende ich halt weiterhin find, etc...

    the same...
     
  17. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    So geht das meiner Meinung (und meiner Referenz und meinem Kompiler) nach nicht. Du kannst nicht innerhalb eines typedef's das struct definieren. Ausserdem ist dies unnoetig. Deine str_Time_T ist (ohne das 'typedef') ein Object vom Typ struct str_Time und kein Alias darauf.
     
  18. Akendo

    Akendo 4k3nd0

    Dabei seit:
    05.02.2008
    Beiträge:
    399
    Zustimmungen:
    0
    Ich kenn genau dieses muster von der Windows XP suche, denn ein "Suchtool" wie in Windows auf einer Maschiene mit 555 Mhz, bringt schon das blosse anklicken die Maschiene zum still Stand. Dazu benutzte ich Gnom, wo ich sehr zufrieden und kaum Problem mit der Suchfunktion.
     
  19. #18 Gott_in_schwarz, 24.03.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Öh, was genau meinst du damit?
    Code:
    typedef struct foo { ... } foo;
    foo bar;
    struct foo baz;
    bar und baz haben nun den gleichen Typ (struct { ... }), foo ist hier einmal das (der/die?) typedef und einmal das struct-Tag, welche in separaten namespaces existieren.
    Ohne das typedef ist str_Time_T eine Variable, ja, aber mit dem typedef ist es, wer hätte das gedacht, ein typedef. Ich versteh irgendwie nicht was du uns damit sagen willst.

    Ok, und welche header wären das? (Abgesehen von kernel-Headern, um die es hier soweit ich das sehe nicht ging.)

    Ist Quatsch, sizeof(char) ist garantiert 1, aber es wird nirgendwo garantiert, dass ein byte soundsoviel bits hat. Das ist also völlig plattformabhängig und Namen wie u08 sind IMHO irreführend.
     
  20. Krotti

    Krotti Foren As

    Dabei seit:
    01.03.2007
    Beiträge:
    79
    Zustimmungen:
    0
    Off Topic

    Je nachdem was man installiert hat bzw. das Herz benötigt:

    Ein paar Beispiele.:
    KDE3 --> /opt/kde3/include

    Wobei KDE und andere Konsorten (meistens) keine Standard Header (stdio.h, stdlib.h, etc.) enthalten...

    Cross Platform Toolchains/SDKs aber schon...hier enthalten auch die Standard Header nicht immer die gleichen Funktionen, typedefs, etc...
    Arch: Atmel AVR
    --> /opt/cross/avr/include

    Arch: Cell Broadband Engine
    --> /opt/cross/spu/sys-root/usr/include

    Arch: PSP
    --> /usr/local/pspdev/psp/include

    Anzumerken ist aber auch das Vieles distrubtionsabhängig ist...

    Überlesen ? Hab eigentlich fast das Gleiche damit gemeint.
    Ich zitiere mich mal selber:
    Gut, vielleicht nicht verständlich formuliert..
    Vorausgesetzt char, short, long, usw. haben auf der Ziel-Plattform/Architektur tatsächlich diese Anzahl an Bits. Jetzt besser formuliert ?
    limits.h existiert aber auch nicht immer...

    Zu u08, s08, etc
    Zitate aus den Kernel Dokumentationen (/usr/src/linux/Documentation/CodingStyle)
    Das rot markierte gefällt mir..bin auch dieser Meinung...
    und weiter...
     
  21. #20 Gott_in_schwarz, 25.03.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Ja, die Info war in einer ziemlich langen Zeile (die ich zum Durchlesen scrollen hätte müssen) versteckt, außerdem in einem (auch noch C++/C99) Comment, da hab ich wohl mental abgeschaltet, sorry.

    Durchaus, hatte ich nicht dran gedacht.

    Hm, zu den typedefs ansich: wie ist das auf Plattformen wo ein char 7bit hat?
    Gibts da dann kein "u08" sondern ein "u07"? (Wäre ja das einzig Sinnvolle.)
    Ich meine Linux wird ja afaik auch viel im embedded-Bereich eingesetzt, also ist die Frage wohl nicht so weit vom Schuss.

    Naja, wohl Geschmackssache. Solange ein u16 wirklich 16bit lang ist, find ichs zumindest teilweise sinnvoll. Wenn das aber nicht gewährleistet ist (kA ob das so ist, siehe vorherige Frage), würde ichs generell ablehnen.
     
Thema: size_t?
Besucher kamen mit folgenden Suchen
  1. size_t

    ,
  2. datentyp size_t

    ,
  3. was ist size_t

    ,
  4. size_t werte,
  5. size_t erklärung,
  6. u16_t datentyp,
  7. size_t c deutsch
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden