假设我有,例如,uint32_t
类型的变量i
。打印出来的预期的方法是这样的:在预期PRIu32的printf格式字符串中使用%lu是否有效?
printf("%"PRIu32"\n", i);
但是,应该指出的是,它需要long unsigned int
至少为32位宽。 long unsigned int
的正确说明符是%lu
。因此,上面的陈述可以被替换为:
printf("%lu\n", i);
我想是的,因为我看不到没有理由。然而,如果是的话,那么这将消除像PRIu32这样的宏化指定符的存在需要,所以我想我最好问。
我问这个问题的原因是我想动态地为printf
创建一个格式字符串,如果我不知道字符串的大小,就很难为这个格式字符串分配空间PRIu32
扩展为(以及sizeof(PRIu32)
是否有效可能值得单独提问)。
在任何情况下,我想这应该是有效的写:
printf("%lu\n", (long unsigned)i);
您的以下C99或C89标准是什么? – LethalProgrammer
@LethalProgrammer C11。 – gaazkam
好的,你已经得到了答案。 – LethalProgrammer