Wenn ich eine ganze Zahl in #define
verwende, was ist data type
in sprintf()
in C99
?Welcher Datentyp ist eine ganze Zahl in #define?
#define NUMBER 100
sprintf(buf, "%i\n", NUMBER); // is it %i, %u, %lu ?
Wenn ich eine ganze Zahl in #define
verwende, was ist data type
in sprintf()
in C99
?Welcher Datentyp ist eine ganze Zahl in #define?
#define NUMBER 100
sprintf(buf, "%i\n", NUMBER); // is it %i, %u, %lu ?
#define NUMBER1 100 /* int: use "%d" or "%i" in printf() */
#define NUMBER2 100U /* unsigned int: use "%u" in printf() */
#define NUMBER3 100L /* long int: use "%ld" or "%li" in printf() */
#define NUMBER4 100UL /* unsigned long int: use "%lu" in printf() */
/* C99 */
#define NUMBER5 100LL /* long long int: use "%lld" or "%lli" in printf() */
#define NUMBER6 100ULL /* unsigned long long int: use "%llu" in printf() */
Hinweis: die U- und L auch in Klein
Note2 sein kann: die U vor oder nach dem L kommen kann oder LL
Sehr nette Antwort Ich wusste das nicht. –
der Typ dieser int
Literal ist. Sie sollten %d
oder %i
verwenden.
NUMBER
wird buchstäblich mit 100
beim Kompilieren durch den Präprozessor ersetzt. Die Tatsache, dass es ein Makro ist, bedeutet nichts für den Compiler, denn der Compiler sieht nie NUMBER
; der Compiler sieht nur 100
.
Alle #define
-d Artikel sind einfache Text Ersetzungen: sich vorstellen, dass die 100
wird anstelle der NUMBER
Kennung eingefügt:
sprintf(buf, "%i\n", NUMBER);
// ^^^ It's sprintf, don't forget the buffer!
Da 100
eine ganze Zahl wörtliche, sollten Sie %d
verwenden.
Sie haben Recht, ich habe die Variable in sprintf() vergessen! –
Wäre es nicht äquivalent zu 'sprintf ("% i \ n ", 100)'? –
Faustregel: Ein Makro ist Text kopieren und einfügen. :) – Mysticial