#define中的整数是什么数据类型?

时间:2012-12-01 18:44:35

标签: c

如果我在#define中使用整数,data type中的sprintf()认为C99是什么?

#define NUMBER 100

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

3 个答案:

答案 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