2012-12-01 26 views
5

如果我使用#define中的整数,data type是什么sprintf()C99什么数据类型是#define中的整数?

#define NUMBER 100 

sprintf(buf, "%i\n", NUMBER); // is it %i, %u, %lu ? 
+2

岂不是等同于'的sprintf( “%I \ n” 个,100)'? – 2012-12-01 18:46:20

+1

经验法则:宏是文本的复制和粘贴。 :) – Mysticial

回答

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

所有#define -d项目是简单的文本替换:想象100被粘贴在代替NUMBER标识符:

sprintf(buf, "%i\n", NUMBER); 
//  ^^^ It's sprintf, don't forget the buffer! 

由于100是文字的整数,你应该使用%d

+0

你说得对,我忘了sprintf()中的变量! –