【发布时间】:2010-10-24 09:28:44
【问题描述】:
我对@987654321@ 有一个大致的了解,但我希望能澄清一些要点。我有一个函数,它从一个缓冲区读取一个以空字符结尾的字符串,并在另一个缓冲区中写出一个 URL 编码版本。该函数有这个签名(目前没有restrict):
char const *StringUrlEncode(char const *unencoded,
char *encoded,
char *encodedEnd);
unencoded 是我的以 null 结尾的源字符串。目标缓冲区由encoded和encodedEnd表示,其中encoded指向缓冲区中的第一个char,encodedEnd指向缓冲区之后的第一个字符,即函数将写入chars,但不包括encodedEnd 指向的位置——如果你熟悉 C++ STL,这是基本的begin/end 迭代器对约定。
如果我在这个函数中添加restrict,它应该只应用于前两个参数吗:
char const *StringUrlEncode(char const *restrict unencoded,
char *restrict encoded,
char *encodedEnd);
或者将它添加到所有三个参数中是否有一些我不理解的好处?
我可以看到使输入和输出缓冲区restrict 有助于编译器知道它们不重叠。但是由于最后一个参数encodedEnd 仅用于标记输出缓冲区的结束,我认为restrict 对这里的编译器没有任何帮助(尽管我认为它不会伤害,除了在函数声明中添加不必要的噪音)。
【问题讨论】:
标签: c pointers c99 restrict-qualifier