如果我在#define
中使用整数,data type
中的sprintf()
认为C99
是什么?
#define NUMBER 100
sprintf(buf, "%i\n", NUMBER); // is it %i, %u, %lu ?
答案 0 :(得分:9)
#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之前或之后出现
答案 1 :(得分:3)
该文字的类型为int
。您应该使用%d
或%i
。
NUMBER
会被100
替换。事实上,它是一个宏对编译器没有任何意义,因为编译器永远不会看到NUMBER
;编译器只看到100
。
答案 2 :(得分:2)
所有#define
- d项都是简单的文本替换:假设粘贴了100
而不是NUMBER
标识符:
sprintf(buf, "%i\n", NUMBER);
// ^^^ It's sprintf, don't forget the buffer!
由于100
是整数文字,因此您应使用%d
。