如果我使用#define
中的整数,data type
是什么sprintf()
在C99
?什么数据类型是#define中的整数?
#define NUMBER 100
sprintf(buf, "%i\n", NUMBER); // is it %i, %u, %lu ?
如果我使用#define
中的整数,data type
是什么sprintf()
在C99
?什么数据类型是#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() */
注:在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
。
你说得对,我忘了sprintf()中的变量! –
岂不是等同于'的sprintf( “%I \ n” 个,100)'? – 2012-12-01 18:46:20
经验法则:宏是文本的复制和粘贴。 :) – Mysticial