1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

[C] %d macht Probleme

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Lukimoe, 14.11.09.

  1. Lukimoe

    Lukimoe Fuji

    Dabei seit:
    20.07.08
    Beiträge:
    36
    Hi,
    in meinem Buch stehen ein paar Beispielprogramme die innerhalb von printf %d benutzen, z.B.:

    Code:
            printf("\nEin char		belegt %d Bytes", sizeof( char ));
    	printf("\nEin int		belegt %d Bytes", sizeof( int ));
    	printf("\nEin short		belegt %d Bytes", sizeof( short ));
    	printf("\nEin long		belegt %d Bytes", sizeof( long ));
    	printf("\nEin unsigned char		belegt %d Bytes", sizeof( unsigned char ));
    	printf("\nEin unsigned int		belegt %d Bytes", sizeof( unsigned int ));
    	printf("\nEin unsigned short	belegt %d Bytes", sizeof( unsigned short ));
    	printf("\nEin unsigned long		belegt %d Bytes", sizeof( unsigned long ));
    	printf("\nEin float		belegt %d Bytes", sizeof( float ));
    	printf("\nEin double	belegt %d Bytes", sizeof( double ));
    
    Ich kriege aber beim Kompilieren immer diese Meldung:
    Code:
    warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘long unsigned int’
    Leider steht in den ersten Kapiteln noch nichts über die Verwendung von %d,
    ich kanns mir natürlich erschließen aber Bescheid weiß ich nicht...
    Ist das irgendwas Mac-spezifisches oder ist da generell der Wurm drin?

    Ausführen kann ich das Programm schon, aber das mit den Warnungen sollte ja eher nicht sein...

    Danke schonmal,
    Lukas
     
  2. Pii

    Pii Rheinischer Krummstiel

    Dabei seit:
    25.06.07
    Beiträge:
    383
    Mir fallen spontan drei Möglichkeiten ein.

    Format: Verwende %ld anstatt %d
    Casting: Verwende (int)sizeof(char)
    Für Faule: Compiler "clang llvm" benutzen
     
  3. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Mac-typisch? Weiß nicht. Der Code ist einfach unsauber.

    %d nimmt einen int.

    Du verwendest sizeof(). sizeof() als liefert als Typ size_t. Das ist ein vorzeichenloser Integer. Nun kann aber der Integer eine andere Größe haben als int, insbesondere dann, wenn etwa int 32 Bit hat, das System aber größere Typen verarbeiten kann, explizit weil es im 64-Bit-Modell läuft. Dann ist size_t ein 64-Bit-Typ.

    Da auf Macs ILP32/LP64 verwendet wird, entspricht size_t einem long.

    Leider kennt printf() et al. keinen Format-Specifier für size_t. %p würde allerdings immer passen. Da bekommst du aber eine hexadezimale Ausgabe.
     
  4. Lukimoe

    Lukimoe Fuji

    Dabei seit:
    20.07.08
    Beiträge:
    36
    Okay, dann liegt das wohl auch daran, dass im Buch noch von 16bit Systemen die Rede ist *g*
    Aber jetzt weiß ich ja, wie ichs anpassen muss...

    Danke :)
     

Diese Seite empfehlen