为什么`printf`的原型中有`restrict`关键字?

4

根据我的 stdio.hprintf 的原型是

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

在解释 Restrict的页面上,它说这是一个用于指示指针是唯一的关键字。然而,我不明白为什么printf需要它。
为什么printf有一个“restrict”关键字?
如果需要进一步解释“restrict”的含义,请说明。
1个回答

1
基本上,格式字符串不应与其任何参数重叠,否则结果是未定义的。 "restrict" 关键字使这一点更加清晰,并且不仅在文档中提到它。
至于为什么...
对于 snprintf()sprintf(),显然应该清楚为什么格式不应与目标缓冲区重叠,但对于输出到文件的变体而言,情况有些模糊。
我怀疑这是因为 %hhn 指示符会将其参数(即一个 signed char *)设置为迄今为止写入的字符数。如果您传递指向格式字符串元素的指针,则会修改字符串,从而可能引入未定义的行为 - 如果该数字对应于字符 '%' 的值呢?

也许可以在重复问题上发布这个答案,因为现在那个问题上只有错误的答案... - R.. GitHub STOP HELPING ICE
@R.. 呃,可能是在它关闭的同时发布了这个帖子。我会考虑一下的。 - Shawn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接