Jeśli używam liczby całkowitej w #define
, co data type
uważa się za sprintf()
w C99
?Jaki typ danych to liczba całkowita w #define?
#define NUMBER 100
sprintf(buf, "%i\n", NUMBER); // is it %i, %u, %lu ?
Jeśli używam liczby całkowitej w #define
, co data type
uważa się za sprintf()
w C99
?Jaki typ danych to liczba całkowita w #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() */
Uwaga: U i L może być również małymi
UWAGA2: U może przyjść przed lub po L lub LL
Bardzo ładna odpowiedź Nie wiedziałem tego. –
Typ tego literału to int
. Powinieneś użyć %d
lub %i
.
NUMBER
dosłownie zostaje zastąpiony przez 100
podczas kompilacji przez preprocesor. Fakt, że jest to makro, nic nie znaczy dla kompilatora, ponieważ kompilator nigdy nie widzi NUMBER
; kompilator widzi tylko 100
.
Wszystkie -d przedmioty #define
są proste podstawienia tekstowe: wyobraźmy sobie, że 100
jest wklejony w zamiast identyfikatora NUMBER
:
sprintf(buf, "%i\n", NUMBER);
// ^^^ It's sprintf, don't forget the buffer!
od 100
jest liczbą całkowitą dosłowny, należy użyć %d
.
Masz rację, zapomniałem zmiennej w sprintf()! –
Czy nie byłoby to równoznaczne z 'sprintf ("% i \ n ", 100)'? –
Rule of Thumb: Makro to kopiowanie i wklejanie tekstu. :) – Mysticial