Bereinigen Sie NSLog – Kein Zeitstempel und Programmname

Lesezeit: 1 Minute

Benutzer-Avatar
Rodrigo

Ich beende fast ein sauberes NSLog mit diesem Code:

#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, __VA_ARGS__] UTF8String]);

Das funktioniert gut, wenn ich das mache:

 NSLog(@"Show %@ message", @"this");

Aber, wird fehlschlagen, wenn ich es benutze

 NSLog(@"One argument");

Weil __VA_ARGS__ ist nichts, also erzeuge es

 printf("%s\n", [[NSString stringWithFormat:@"One argument",] UTF8String]);

Das Problem ist also das Komma. Da dies ein Makro ist, __VA_ARGS__ ist nichts. Also kann ich sowas nicht machen __VA_ARGS__==nil weil produzieren wird ==nil und wird scheitern.

Die Frage ist einfach: Was ist wann zu tun __VA_ARGS__ ist nichts? Oder verwenden Sie nur Kommas, wenn Sie mehr Argumente haben.

Benutzer-Avatar
xuzhe

Verwenden Sie diesen Code (beachten Sie die ## Teil):

#define NSLog(FORMAT, ...) fprintf(stderr, "%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);

  • Funktioniert gut. ich dachte ## keinen Sinn machen mit __VA_ARGS__aber Arbeit.

    – Rodrigo

    22. September 2011 um 17:15 Uhr


  • Sie sollten printf(“%s\n” jedoch in fprintf( stderr, “%s\n” ändern. Aus verschiedenen Gründen, am wichtigsten, geht printf nach stout, das zwischengespeichert wird, stderr wird nicht zwischengespeichert und sofort ausgegeben.

    – Nathan-Tag

    23. September 2011 um 3:20 Uhr


  • Hm.. @Nathan Day. Ich habe solche Dinge gesehen und nicht verstanden. Aber wenn es die Dinge besser macht, werde ich es verwenden 🙂

    – Rodrigo

    23. September 2011 um 13:19 Uhr

  • Oh, wie süß es ist! 🙂

    – devios1

    11. April 2015 um 20:17 Uhr

  • Gibt es eine Möglichkeit, dies global zu machen. Ich bekomme immer noch Zeit und Anwendungsnamen für andere Bibliotheken.

    – Olcay Ertaş

    7. Dezember 2017 um 8:35 Uhr

1372170cookie-checkBereinigen Sie NSLog – Kein Zeitstempel und Programmname

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy