5

如果我在 in 中使用一个整数#definedata type它被认为是sprintf()inC99什么?

#define NUMBER 100

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

3 回答 3

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 之前或之后

于 2012-12-01T18:47:25.747 回答
3

该文字的类型是int. 您应该使用%d%i

NUMBER100在由预处理器编译时,字面上会被替换为。它是一个宏这一事实对编译器没有任何意义,因为编译器永远不会看到NUMBER; 编译器只会看到100.

于 2012-12-01T18:47:12.597 回答
2

所有#define-d 项目都是直接的文本替换:假设100粘贴的是 而不是NUMBER标识符:

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

由于100是整数文字,因此您应该使用%d.

于 2012-12-01T18:50:22.710 回答