根据我的printf
,stdio.h
的原型是
extern int printf (const char *__restrict __format, ...);
在解释Restrict的页面上,它说这是一个关键字,用于指示指针是唯一的。但是,我不明白为什么printf
会需要它。
printf
为什么有“ restrict”关键字?
如果有必要进一步解释“限制”的含义,请这样做。
答案 0 :(得分:1)
基本上,格式字符串不应与其任何参数重叠,否则结果是不确定的。 restrict
不仅说明了文档,也清楚了这一点。
为什么...
对于snprintf()
和sprintf()
来说,很明显为什么格式不应该与目标缓冲区特别重叠,但是对于输出到文件中的变量来说有点模糊。 / p>
我怀疑是因为有%hhn
说明符,该说明符将其参数signed char *
设置为到目前为止写入的字符数。如果将指针传递给格式字符串的元素,这将修改字符串,从而可能导致未定义的行为-如果数字与字符'%'
的值相对应怎么办?