Bestimmung des Wertebereichs



  • Also die Aufgabe, die besteht, besagt dass ich Wertebereiche von Variablen vom Typ char, short, int und long bestimmen soll.

    Das Programm soll die entsprechenden Werte aus den Standard-Definitionsdateien herausnehmen und dann sollen sie berechnet werden.

    Wie gehe ich das am besten an ?

    Gibt es direkte Funktionen, die solche Aufgaben übernehmen können oder muss man alles selbst schreiben ! ?



  • schau mal in die limits.h rein
    da sind eigentlich die wertebereiche drin...

    auszug:

    #ifndef _CHAR_UNSIGNED
    #define CHAR_MIN    SCHAR_MIN   /* mimimum char value */
    #define CHAR_MAX    SCHAR_MAX   /* maximum char value */
    #else
    #define CHAR_MIN      0
    #define CHAR_MAX    UCHAR_MAX
    #endif  /* _CHAR_UNSIGNED */
    
    #define MB_LEN_MAX    2             /* max. # bytes in multibyte char */
    #define SHRT_MIN    (-32768)        /* minimum (signed) short value */
    #define SHRT_MAX      32767         /* maximum (signed) short value */
    #define USHRT_MAX     0xffff        /* maximum unsigned short value */
    #define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */
    #define INT_MAX       2147483647    /* maximum (signed) int value */
    #define UINT_MAX      0xffffffff    /* maximum unsigned int value */
    #define LONG_MIN    (-2147483647L - 1) /* minimum (signed) long value */
    #define LONG_MAX      2147483647L   /* maximum (signed) long value */
    #define ULONG_MAX     0xffffffffUL  /* maximum unsigned long value */
    
    #if     _INTEGRAL_MAX_BITS >= 8
    #define _I8_MIN     (-127i8 - 1)    /* minimum signed 8 bit value */
    #define _I8_MAX       127i8         /* maximum signed 8 bit value */
    #define _UI8_MAX      0xffui8       /* maximum unsigned 8 bit value */
    #endif
    
    #if     _INTEGRAL_MAX_BITS >= 16
    #define _I16_MIN    (-32767i16 - 1) /* minimum signed 16 bit value */
    #define _I16_MAX      32767i16      /* maximum signed 16 bit value */
    #define _UI16_MAX     0xffffui16    /* maximum unsigned 16 bit value */
    #endif
    ...
    ...
    

    was genau sollst du damit machen???



  • Einfach diese besagten Werte dann ausgeben....

    Die Ausgabe kann ich ohne große Mühen, dann über printf machen oder ?



  • Ich habs jetzt mal mit deinem Quellcode-Tipp probiert und es hat funktioniert:

    #include <stdio.h>
    #include <float.h>
    #include <limits.h>
    
    #define MB_LEN_MAX    2             /* max. # bytes in multibyte char */ 
    #define SHRT_MIN    (-32768)        /* minimum (signed) short value */ 
    #define SHRT_MAX      32767         /* maximum (signed) short value */ 
    #define USHRT_MAX     0xffff        /* maximum unsigned short value */ 
    #define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */ 
    #define INT_MAX       2147483647    /* maximum (signed) int value */ 
    #define UINT_MAX      0xffffffff    /* maximum unsigned int value */ 
    #define LONG_MIN    (-2147483647L - 1) /* minimum (signed) long value */ 
    #define LONG_MAX      2147483647L   /* maximum (signed) long value */ 
    #define ULONG_MAX     0xffffffffUL  /* maximum unsigned long value */ 
    
    int main()
    
    {  
      printf(" Wert von Short signed Minimum %d\n", SHRT_MIN);
      printf(" Wert von Short signed Maximum %d\n", SHRT_MAX);
      printf(" Wert von Short unsigned Maximum %d\n", USHRT_MAX);
      printf(" Wert von Integer signed Minimum %d\n", INT_MIN);
      printf(" Wert von Integer signed Maximum %d\n", INT_MAX);
      printf(" Wert von Integer unsigned Maximum %d\n", UINT_MAX);
      printf(" Wert von Long signed Minimum %d\n", LONG_MIN);
      printf(" Wert von Long signed Maximum %d\n", LONG_MAX);
      printf(" Wert von Long unsigned Maximum %d\n", ULONG_MAX);
    }
    
    // Erklärung des Programms //
    

    Dennoch hab ich die Frage, ob man die Werte nicht doch noch aus einer Standard-Definitionsdatei lesen kann.
    Oder funktioniert das nicht so einfach ?!? *etwas unwissend*



  • @cHillb3rT:

    ich weiß nicht, wie oft ich das noch sagen muss. Es heißt int main(), vor allem, wenn du in ANSI C Forum postest.

    Und bitte, mach nicht so lange Kommentare, benutze mehr Zeilen dafür, nicht jeder hat 10000000000x800 Auflösung, wo man nicht so viel scrollen muss (bis 3 Stunden, bis ich auf "Auf Beitrag antworten" klicken kann) . Das macht nur die Threads unlesbar. Danke!

    Zu deinem Post: wenn du schon limit.h includierst, dann brauchst du

    #define MB_LEN_MAX    2             /* max. # bytes in multibyte char */ 
    #define SHRT_MIN    (-32768)        /* minimum (signed) short value */ 
    #define SHRT_MAX      32767         /* maximum (signed) short value */ 
    #define USHRT_MAX     0xffff        /* maximum unsigned short value */ 
    #define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */ 
    #define INT_MAX       2147483647    /* maximum (signed) int value */ 
    #define UINT_MAX      0xffffffff    /* maximum unsigned int value */ 
    #define LONG_MIN    (-2147483647L - 1) /* minimum (signed) long value */ 
    #define LONG_MAX      2147483647L   /* maximum (signed) long value */ 
    #define ULONG_MAX     0xffffffffUL  /* maximum unsigned long value */
    

    nicht selber zu schreiben, das ist der Sinn von limits.h. Weil sonst ist das nicht mehr portabel.



  • lass den ganzen define block weg.

    du nimmst die konstanten doch direkt aus der limits.h.



  • ah das war auch meine Frage in der Beziehung.... ob man den dann weglassen kann. Aber okay alles klar !

    @ Supertux:
    Ich werde nun deine Ratschläge mehr einbeziehen !



  • Hi

    supertux schrieb:

    das ist der Sinn von limits.h.


Anmelden zum Antworten