作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编译以下代码时:
#include <stdio.h>
int main() {
printf("99% Invisible");
return 0;
}
在 gcc 7.5.0 中,我收到以下警告:
test.c: In function ‘main’:
test.c:4:16: warning: ' ' flag used with ‘%n’ gnu_printf format [-Wformat=]
printf("99% Invisible");
^
test.c:4:16: warning: 'I' flag used with ‘%n’ gnu_printf format [-Wformat=]
test.c:4:16: warning: format ‘%n’ expects a matching ‘int *’ argument [-Wformat=]
printf("99% Invisible");
~~~^
这是怎么回事?我在文档中的任何地方都没有看到提及“”标志或“I”标志。该代码输出 99visible
,基本上忽略格式字符串中的空格和 I 并遵循 %n 格式。
编辑:人们似乎误解了这个问题。我知道如何 printf 文字 %,以及 %n
的作用。我只是好奇这里发生了什么。
(另外,对于那些了解上下文的人:我知道相关系统没有使用 C,我只是好奇 printf 在这里做什么)。
最佳答案
I
flag 是 printf
的 GNU 扩展。来自 man page :
glibc 2.2 adds one further flag character.
I
For decimal integer conversion (
i
,d
,u
) the output uses thelocale's alternative output digits, if any. For example, since glibc2.2.3 this will give Arabic-Indic digits in the Persian ("fa_IR") locale.
因此,当编译器检查格式字符串时,它会看到 % In
作为格式说明符,即空格和 I
应用于 n
的标志转换说明符。由于这两个标志都不适用于 n
转换说明符,编译器会为每个转换发出警告。
关于c - C printf 中的 'I'(大写 i)标志是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71534558/
我是一名优秀的程序员,十分优秀!