2016-07-28 55 views
-1

打印U32我试图打印U32变量C,不知道什么是它给了错误的方式写用printf用C

printf("print_variable %u\n", u32"); 

,我应该逼(INT)U32?

+4

u32是什么类型的?它是如何声明的? –

+0

产生了什么错误? – rici

+0

给***什么***错误?你没有注意到'u32''中的语法错误吗?我确定编译器确实如此。你建议的cast((int)u32')无论如何都是错误的:'%u'是* unsigned *。 –

回答

1

我假定你的意思uint32_t,使包括inttypes.h和使用

printf("Value: %" PRIu32 "\n", u32); 
+0

缺少“%”号 – FredK

+0

@chqrlie它没有 –

1

没有标准型U32

假设它是一个整数类型,可能是一个32位无符号类型的typedef,您可以安全地打印出值是这样的:

printf("%lu\n", (unsigned long)u32); 

我用unsigned long而不是unsigned int因为unsigned int可以合法仅16位宽。 unsigned long保证至少为32位宽,因此它可以保存u32类型的任何可能的值(假设u32被定义为理智的)。对于64位无符号类型,您可以安全使用unsigned long long"%llu"

从C99开始,标准C库包含一个标头<stdint.h>,该标头定义了固定宽度类型,包括uint32_t,它可能与U32的属性相同。我不建议对工作代码进行大规模修改,只是使用标准化的typedef,但在新代码中,您应该使用uint32_t。标准头<inttypes.h>定义宏的使用与printf,让你写,为iharob's answer suggests

uint32_t u32; 
printf("%" PRIu32 "\n", u32); 

PRIu32扩展为一个字符串;三个文字"%"PRIu32"\n"是由编译器连接在一起。)

虽然我个人发现宏名称(记录在N1570第7.8节)难以记忆。我经常只是将其转换为我知道的足够宽的预定义类型,如上所示。

1

当不确定使用什么格式说明打印一些整数:

  1. 如果类型在C像int, unsigned long long, size_t, uint8_t等指定类型,最好先使用的匹配符"%d", "%llu", "%zu", "%" PRIu8等众多资源列出相应的类型为说明符。

    #include <inttypes.h> 
    printf("%" PRIu32 "\n", u32); // type known to be 32-bit unsigned - no padding. 
    
  2. 当类型的标准类型的关系不明确,但其正负号的烦躁是已知的,代码可转换为相应的宽型。

    #include <stdint.h> 
    printf("%ju\n", (uintmax_t) u32); // type is known to be some unsigned integer