如果我在 in 中使用一个整数#define
,data type
它被认为是sprintf()
inC99
什么?
#define NUMBER 100
sprintf(buf, "%i\n", NUMBER); // is it %i, %u, %lu ?
如果我在 in 中使用一个整数#define
,data type
它被认为是sprintf()
inC99
什么?
#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() */
注意:U 和 L 也可以小写 注意
2:U 可以在 L 或 LL 之前或之后
该文字的类型是int
. 您应该使用%d
或%i
。
NUMBER
100
在由预处理器编译时,字面上会被替换为。它是一个宏这一事实对编译器没有任何意义,因为编译器永远不会看到NUMBER
; 编译器只会看到100
.
所有#define
-d 项目都是直接的文本替换:假设100
粘贴的是 而不是NUMBER
标识符:
sprintf(buf, "%i\n", NUMBER);
// ^^^ It's sprintf, don't forget the buffer!
由于100
是整数文字,因此您应该使用%d
.