Definition 'Dereferenzierung'


  • Mod

    FrEEzE2046 schrieb:

    SeppJ schrieb:

    Falsch. Laut C++ Standard müssen die gleichen Limits wie in C89 erfüllt sein und im ANSI C89 Standard, Anhang 4, steht dies:

    Dir ist schon klar, dass laut diesen Zeilen ein int 16 Bit breit wäre. Muss ich mehr sagen?

    Genau das wollte ich sagen. Aber ja: Du musst mehr sagen, denn ich weiß nicht worauf du hinaus willst 😕 .

    edit: Ahh, ich glaube ich weiß worauf du hinaus willst. Lies nochmal genau:

    ANSI C89 schrieb:

    A.4 IMPLEMENTATION LIMITS

    The contents of a header <limits.h> are given below, in alphabetic
    order. The minimum magnitudes shown shall be replaced by
    implementation-defined magnitudes with the same sign. The values
    shall all be constant expressions suitable for use in #if
    preprocessing directives. The components are described further in
    $2.2.4.2.



  • pumuckl schrieb:

    Wirklich immer?

    size_t ist immer der Rückgabetyp des sizeof() Operators. Laut Standard ist lediglich festgelegt, dass es ein vorzeichenloser integraler Typ ist.

    SeppJ schrieb:

    Genau das wollte ich sagen. Aber ja: Du musst mehr sagen, denn ich weiß nicht worauf du hinaus willst 😕 .

    Ich will dir damit sagen, dass eine Implementierung von int als 32 Bit breiter Typ dann abseits des Standards liegen würde.


  • Mod

    @FrEEzE2046 :
    Ich habe oben noch was editiert, das dich interessieren dürfte.



  • SeppJ schrieb:

    Falsch. Laut C++ Standard müssen die gleichen Limits wie in C89 erfüllt sein und im ANSI C89 Standard, Anhang 4, steht dies: [...]

    Das ist mir auch neu. Ich hab im C++-Standard jetzt nur gefunden, dass es INT_MAX & Co geben muss, nicht aber welchen Beschränkungen sie unterliegen. Kannst du mir den Paragraphen sagen, der angibt dass es die selben Beschränkungen gibt?


  • Mod

    pumuckl schrieb:

    SeppJ schrieb:

    Falsch. Laut C++ Standard müssen die gleichen Limits wie in C89 erfüllt sein und im ANSI C89 Standard, Anhang 4, steht dies: [...]

    Das ist mir auch neu. Ich hab im C++-Standard jetzt nur gefunden, dass es INT_MAX & Co geben muss, nicht aber welchen Beschränkungen sie unterliegen. Kannst du mir den Paragraphen sagen, der angibt dass es die selben Beschränkungen gibt?

    18.2.2.(2) schrieb:

    The contents are the same as the Standard C library header <limits.h>.

    Das wird sich ja wohl nicht nur auf das Vorhandensein der Makros beziehen sondern auch auf ihre Werte, sonst wäre der satz ziemlich witzlos, da die Namen der Makros im Satz davor genannt werden.

    Ich habe diese Klausel aber heute auch das erste Mal gesehen als ich im Zuge dieser Diskussion mal nachgeschaut habe.



  • #define INT_MAX       2147483647    /* maximum (signed) int value */
    #define UINT_MAX      0xffffffff    /* maximum unsigned int value */
    

    Dann dürfte bei einer solchen Definition kein 64 Bit Compiler einen 64 Bit breiten int benutzen.


  • Mod

    FrEEzE2046 schrieb:

    #define INT_MAX       2147483647    /* maximum (signed) int value */
    #define UINT_MAX      0xffffffff    /* maximum unsigned int value */
    

    Dann dürfte bei einer solchen Definition kein 64 Bit Compiler einen 64 Bit breiten int benutzen.

    Die Makros geben die Implementationsdetails an und dienen nicht dazu, diese zu ändern!


  • Mod

    FrEEzE2046 schrieb:

    #define INT_MAX       2147483647    /* maximum (signed) int value */
    #define UINT_MAX      0xffffffff    /* maximum unsigned int value */
    

    Dann dürfte bei einer solchen Definition kein 64 Bit Compiler einen 64 Bit breiten int benutzen.

    korrekt. Bei einer Implementation mit 64bit breiten Interteger müssen die obigen Makros entsprechend angepasst werden, um die für diese Implementation zutreffenden Werte zu liefern. Oder wolltest du etwas anderes ausdrücken?



  • FrEEzE2046 schrieb:

    #define INT_MAX       2147483647    /* maximum (signed) int value */
    #define UINT_MAX      0xffffffff    /* maximum unsigned int value */
    

    Dann dürfte bei einer solchen Definition kein 64 Bit Compiler einen 64 Bit breiten int benutzen.

    Bei einem 64-Bit Compiler werden die mitgelieferten Header dann wohl auch anders aussehen. Der C-Standard gibt da nur an, wie groß die Werte mindestens sein müssen.


Anmelden zum Antworten