作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如,假设我有一个 uint32_t
类型的变量 i
。打印它的预期方式是这样的:
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);
最佳答案
Thus, can the above statement be replaced with:
printf("%lu\n", i);
I’d suppose yes, since I can see no reason why not.
不,因为long unsigned int
可以大于 32 位,或者如果恰好 32 位仍然可以具有与 uint32_t
不同的表示形式.
In any case, I suppose it should be valid to write:
printf("%lu\n", (long unsigned)i);
是的,正如您观察到的,它也是安全的,因为long unsigned int
需要能够表示 uint32_t
的所有值可以拿。
关于c - 在预期 PRIu32 的 printf 的格式字符串中使用 %lu 是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44209721/
我是一名优秀的程序员,十分优秀!