Nếu tôi sử dụng một số nguyên trong #define
, thì data type
nào được coi là ở số sprintf()
trong C99
?Loại dữ liệu nào là số nguyên trong #define?
#define NUMBER 100
sprintf(buf, "%i\n", NUMBER); // is it %i, %u, %lu ?
Nếu tôi sử dụng một số nguyên trong #define
, thì data type
nào được coi là ở số sprintf()
trong C99
?Loại dữ liệu nào là số nguyên trong #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() */
Lưu ý: U và L cũng có thể ở dạng chữ thường
Note2: U có thể đứng trước hoặc sau khi L hoặc LL
Câu trả lời rất hay, tôi không biết điều này. –
Loại chữ đó là int
. Bạn nên sử dụng %d
hoặc %i
.
NUMBER
được thay thế bằng 100
khi biên dịch bằng bộ tiền xử lý. Thực tế là nó là một macro có nghĩa là không có gì để trình biên dịch, bởi vì trình biên dịch không bao giờ thấy NUMBER
; trình biên dịch chỉ thấy 100
.
Tất cả #define
mục -d là thay thế văn bản đơn giản: hãy tưởng tượng rằng các 100
được dán trong thay vì nhận dạng NUMBER
:
sprintf(buf, "%i\n", NUMBER);
// ^^^ It's sprintf, don't forget the buffer!
Kể từ 100
là một số nguyên theo nghĩa đen, bạn nên sử dụng %d
.
Bạn nói đúng, tôi đã quên biến trong sprintf()! –
Nó sẽ không tương đương với 'sprintf ("% i \ n", 100) '? –
Quy tắc ngón tay cái: Macro là bản sao và dán văn bản. :) – Mysticial