wie kann man der wertebereich von INT´s erhöhen ?



  • Nö, sizeof hat nix mit Bytes zu tun sondern mit chars, d.h. sizeof(char) liefert immer 1. Wieviele Bits nun ein char hat ist damit nicht gesagt. Es ist zwar tatsächlich so, dass ein char auf fast allen Systemen 8 Bits hat, das muss aber nicht sein. Auf der Cray 1 hatte ein char z.B. 32 Bits.



  • #Nö, sizeof hat nix mit Bytes zu tun sondern [...]

    Aha.

    Zitat C99 Standard, Seite 80 Punkt 2:

    The sizeof operator yields the size (in bytes) of its operand, which may be an
    expression or the parenthesized name of a type.

    Ich sehe da eine eindeutige Verbindung zu byte und sizeof.

    Und für alle die immernoch nicht wissen wie der Begriff Byte und Char in der Sprache C zu verstehen sind.

    C99 Std. S4 / 3.6
    byte
    addressable unit of data storage large enough to hold any member of the basic character
    set of the execution environment

    NOTE 2 A byte is composed of a contiguous sequence of bits, the number of which is implementationdefined.
    The least significant bit is called the low-order bit; the most significant bit is called the high-order
    bit.

    C99 Std. S4 / 3.7
    1 character
    (abstract) member of a set of elements used for the organization, control, or
    representation of data

    C99 Std. S4 / 3.7.1
    1 character
    single-byte character
    (C) bit representation that fits in a byte



  • TheTester schrieb:

    #Nö, sizeof hat nix mit Bytes zu tun sondern [...]

    Aha.

    Zitat C99 Standard, Seite 80 Punkt 2:

    The sizeof operator yields the size (in bytes) of its operand, which may be an
    expression or the parenthesized name of a type.

    Ich sehe da eine eindeutige Verbindung zu byte und sizeof.

    Und für alle die immernoch nicht wissen wie der Begriff Byte und Char in der Sprache C zu verstehen sind.

    C99 Std. S4 / 3.6
    byte
    addressable unit of data storage large enough to hold any member of the basic character
    set of the execution environment

    NOTE 2 A byte is composed of a contiguous sequence of bits, the number of which is implementationdefined.
    The least significant bit is called the low-order bit; the most significant bit is called the high-order
    bit.

    C99 Std. S4 / 3.7
    1 character
    (abstract) member of a set of elements used for the organization, control, or
    representation of data

    C99 Std. S4 / 3.7.1
    1 character
    single-byte character
    (C) bit representation that fits in a byte

    Nun ja, es würde ja auch irgendwo Sinn machen, dass endlich mal definiert wird, was ein char eigentlich bedeutet. Andererseits war schon die Grundidee von C eine ganz andere. C sollte ein Workarround für einen universellen Assembler sein und deswegen soll es nie systemabhängige Dinge wiedergeben. Ich rede hier von der Sprache selbst und nicht von Libs oder Headerdateien.
    Wie ich schon angedeutet habe, benutzen manche (zugegebenermassen exotischen) Systeme seltsame Systemwortbreiten. Die Cray I benutzte z.B. einen 32 Bit breiten char-Typ. Es gibt etwas merkwürdigeμCs, die eine char-Breite von 7 Bit haben (frag mich nicht warum). Wie sollte nun die Rückgabe von sizeof aussehen? Wenn ich Deine Argumentation nehme, dann müsste es 4 sein - War es aber nicht! Ok, das waren auch noch alte Standards. Ich kann's jetzt auch nicht nachprüfen, aber macht es wirklich Sinn, dass ein sizeof(char) etwas anderes als 1 liefert? Haben wir dafür nicht die limits.h?
    Ich bin kein ewig gestriger und manche Dinge machen auch Sinn. Manche Neuerungen garantieren das erwartete Verhalten von seit Ewigkeiten benutzten Tricks und das ist gut so. Andere Neuerungen fördern eher Fehler. Ich denk da an Referenzen. Man sollte in einer aufrufenden Funktion schon die Gefahr sehen können, dass die aufgerufene Funktion Seiteneffekte haben könnte.



  • 79616363 schrieb:

    Andere Neuerungen fördern eher Fehler. Ich denk da an Referenzen. Man sollte in einer aufrufenden Funktion schon die Gefahr sehen können, dass die aufgerufene Funktion Seiteneffekte haben könnte.

    verwende ich auch so gut wie nie sondern immer schön pointer



  • 79616363 schrieb:

    Andererseits war schon die Grundidee von C eine ganz andere. C sollte ein Workarround für einen universellen Assembler sein und deswegen soll es nie systemabhängige Dinge wiedergeben.

    Wer hat das denn behauptet?

    C ist die direkte Nachfolgersprache von B ( http://www.answers.com/topic/b-programming-language ), und B sollte eine vereinfachte Version von BCPL sein.

    Alles drei sind immer noch Hochsprachen und haben mit Assembler nix zu tun.

    BCPL wurde in den 1960ern von Martin Richards an der Cambridge-Universitaet von Cambridge, England, als vereinfachte Version von CPL entwickelt, mit einem portablen Compiler. BCPL war die erste Sprache mit portablem Compiler, und es gab auch die ersten virtuellen Maschinen dafuer. ( http://www.answers.com/main/ntquery;jsessionid=1r71qbskjd4su?method=4&dsid=2222&dekey=BCPL&gwp=8&curtab=2222_1&sbid=lc04b )

    Mit C ging die Portabilitaet verloren, im Prinzip ist es ein Rueckschritt von BCPL, jedoch waere es durchaus moeglich, nach demselben Prinzip wie in BCPL portable C Compiler und virtuelle Maschinen zu bauen.



  • Das freut mich sehr 🙂 Wir können und wollen den festgeschriebenen Standard nicht ändern. Es gibt proprietäre Erweiterungen, die sinnvoll wären. Ich denk dabei z.B. (bei gcc) an die Möglichkeit Targets (von gotos) als Sprungziel/Adresse zu verwenden und die einer Variablen zuzuweisen. Leider wird es wohl nie Standard werden. Sowas ist aber natürlich gefährlich und kaum einer begreift's. Wer nen DFA bauen will, der wird aber froh darüber sein. Ok, es gibt Workarrounds.
    Andere (sehr) gefährliche Änderungen wurden vom Standard bestätigt (wie z.B. Referenzen).
    Toll (wirklich!) war auch, dass mittlerweile Makros mit einer variablen Anzahl von Argumenten erlaubt sind - Damit kann man (insbesondere bei der Fehlerbehandlung) wirklich was anfangen.
    Fast traurig, dass auch einige von Kernigham&Ritchie erlaubten Konstrukte in den heutigen (teilweise sehr zweifelhaften) Lehrbüchern verteufelt werden.
    Selbst unsere Gurus haben schon gemeint, dass ein goto nur für Fehlerbehandlungen verwendet werden soll. Und genau dafür taugt es etwas (iss doch nicht viel anders wie ein try/catch)! Mir ist ein einzelnes goto panic in jedem Fall lieber, als eine unendlich verschachtelte Konstruktion (Bei mir kommen maximal 3 bis 4 Klammerebenen vor und logisch zusammengehörige Dinge bleiben beieinander!) Aber gut, Fehlerbehandlung war in den sogenannten Lehrbüchern immer ein Stiefkind.

    Viele Grüsse,

    Uli (der sich nun aber wieder in sein Stammforum trollt)



  • Power Off schrieb:

    C ist die direkte Nachfolgersprache von B ( http://www.answers.com/topic/b-programming-language ), und B sollte eine vereinfachte Version von BCPL sein.
    Alles drei sind immer noch Hochsprachen und haben mit Assembler nix zu tun.

    kennste micht die ++ und -- operatoren? die kann ein c-compiler ganz einfach in entsprechende assemblerbefehle übersetzen. fast jede cpu hat befehle zum hoch/runterzählen. c ist schon irgendwie platformunabhängiges asm. siehe allein schon das 'register' schlüsselwort....



  • 79616363 ist bei Spotlight kein Unbekannter und ich bin seinem Link (http://www.spotlight.de/zforen/ccc/m/ccc-1109021562-14520.html) hier her gefolgt. Und was sehe ich? Er verpestet das Klima auch hier! Es ist kein Geheimnis, dass das Niveau bei Spotlight unter der Guertellinie liegt. Trotzdem schaue ich gelegentlich dort vorbei. Manchmal gibt es auch dort interessante Themen. Ich war über 40 Jahre in der Programmierung und Systemadministration tätig und habe mit Assembler, Fortran und Cobol angefangen, danach habe ich mich u.a. mit C und einer Vorstufe von Perl beschäftigt. Manche Sprachen werdet ihr gar nicht mehr kennen und das muss auch nicht sein. Einen Bildschirm gab es damals noch nicht und wenn, dann war es für die ausgewählten Leute. Stattdessen waren es Lochkarten/Lochstreifen und Ausdrucke. Seit wann war C ein Ersatz für Assembler? Blödsinn! Dieses Juengelchen hat aber wahrscheinlich noch nie einen richtigen Mainframe gesehen oder weiss, was richtiger Assemblercode ist!
    Ich bin mittlerweile pensioniert, aber wenn ich solche Leute hoere, dann wundert mich es nicht, dass der Informatikbereich in Deutschland stirbt. Es waere auch eine Schande, wenn so jemand mit solchem Halbwissen nur noch eine Mark/Euro damit verdienen koennte. Der soll bei seinen Spielkonsolen bleiben!
    Ein Gutes hatte dieser Vorfall aber. Ich werde kuenftig (als offiziell registriertes Mitglied) bei euch vorbei schauen.

    Nun muss ich aber mit meinen Hunden raus (mein drittes Hobby - Nach meiner Frau), lasst euch nicht unterkriegen und macht weiter so!

    Josef



  • 79616363 schrieb:

    Nun ja, es würde ja auch irgendwo Sinn machen, dass endlich mal definiert wird, was ein char eigentlich bedeutet.

    Ist es doch, ein char ist ein Integertyp der groß genug ist um jedes Mitglied aus dem Basic character executionset zu speichern. Und er muss weiterhin in ein Byte passen. Eindeutiger definiert gehts nicht mehr

    Andererseits war schon die Grundidee von C eine ganz andere. C sollte [...] nie systemabhängige Dinge wiedergeben. Ich rede hier von der Sprache selbst und nicht von Libs oder Headerdateien.

    Habe auch nix anderes behauptet

    Wie ich schon angedeutet habe, benutzen manche (zugegebenermassen exotischen) Systeme seltsame Systemwortbreiten. Die Cray I benutzte z.B. einen 32 Bit breiten char-Typ. Es gibt etwas merkwürdigeμCs, die eine char-Breite von 7 Bit haben (frag mich nicht warum). Wie sollte nun die Rückgabe von sizeof aussehen? Wenn ich Deine Argumentation nehme, dann müsste es 4 sein - War es aber nicht!

    Die Rückgabe von sizeof würde 1 bringen. Da das vom Standard bei char garantiert ist. Da sizeof die Anzahl von Bytes zurückliefert. Und nach Standard ja definiert ist das EIN char in EIN Byte zu passen hat. Was wiederum heisst das ein char höchstens so groß wie ein Byte sein kann aber auch kleiner. Und dann würde immernoch sizeof 1 rauskommen. Es bleibt dem Compilerhersteller überlassen wie er das anlegt unter Beachtung der Leistungfähigkeit der darunterliegenden Hardware. Und für die Cray ist es halt nun mal praktisch ein 32Bit Char zu haben.

    Ich meine die "Verwirrung" kommt doch nur zu stande, weil man die char Bitbreiten mit anderen Systemen vergleicht. Wenn ich an einer nehmen wir eine Cray sitzen würde wärs mir egal, für mich ist ein Byte ein Byte und das hat dann halt mindestens 32 bit. Trotzdem bleibt es für mich ein einziges Byte.



  • Josef1939 schrieb:

    79616363 ist bei Spotlight kein Unbekannter und ich bin seinem Link (http://www.spotlight.de/zforen/ccc/m/ccc-1109021562-14520.html) hier her gefolgt. Und was sehe ich? Er verpestet das Klima auch hier!

    was denn? er hat doch nix verpestet 😕



  • net schrieb:

    Josef1939 schrieb:

    79616363 ist bei Spotlight kein Unbekannter und ich bin seinem Link (http://www.spotlight.de/zforen/ccc/m/ccc-1109021562-14520.html) hier her gefolgt. Und was sehe ich? Er verpestet das Klima auch hier!

    was denn? er hat doch nix verpestet 😕

    Nein, hat er natürlich nicht. Und da ich gelegentlich auch bei Spotlight poste, kann ich den Vorwurf des "verpestens" nicht nachvollziehen.

    Interessieren würde mich, wer hinter Josef1939 steckt 😉



  • shit on spotlight! 😡



  • Ich glaub, dass ich mich hier raus halten sollte. Es geht schon wieder so los wie bei Spottlicht. Ich glaube, dass ich besser gar nix mehr sage.

    Viele Grüsse (insbesondere an Josef),

    Uli



  • Warum raushalten? Du hast Sachverstand (mMn) und desweiteren, sind wir hier mitten in einer Diskussion.. Lass dich doch nicht von "Josef" hier rausdrängen aus dem Thread.. Wieso auch? Also mich persönlich hast du nicht gestört/verpestet, wie auch immer.. Im Gegenteil, ich habe etwas von dir dazu gelernt, sollte das etwa verboten werden?



  • Brutus schrieb:

    Warum raushalten? Du hast Sachverstand (mMn) und desweiteren, sind wir hier mitten in einer Diskussion.. Lass dich doch nicht von "Josef" hier rausdrängen aus dem Thread..

    genau, bleib da, du scheinst dich gut auszukennen und so jemand wird immer gebraucht 🙂
    blöder josef 😡


Anmelden zum Antworten