为什么“ printf”的原型具有“ restrict”?

时间:2019-05-08 02:35:58

标签: c printf restrict-qualifier

根据我的printfstdio.h的原型是

extern int printf (const char *__restrict __format, ...);

在解释Restrict的页面上,它说这是一个关键字,用于指示指针是唯一的。但是,我不明白为什么printf会需要它。

printf为什么有“ restrict”关键字?

如果有必要进一步解释“限制”的含义,请这样做。

1 个答案:

答案 0 :(得分:1)

基本上,格式字符串不应与其任何参数重叠,否则结果是不确定的。 restrict不仅说明了文档,也清楚了这一点。

为什么...

对于snprintf()sprintf()来说,很明显为什么格式不应该与目标缓冲区特别重叠,但是对于输出到文件中的变量来说有点模糊。 / p>

怀疑是因为有%hhn说明符,该说明符将其参数signed char *设置为到目前为止写入的字符数。如果将指针传递给格式字符串的元素,这将修改字符串,从而可能导致未定义的行为-如果数字与字符'%'的值相对应怎么办?