char *
(以及相关变量)可能与任何内容进行别名。 signed char *
和unsigned char *
(以及它们的相关变量)是否例外?
换句话说,如果我不希望它们与其他类型的指针参数重叠(因为它们可能会与它们重叠),那么将restrict
应用于 char*
函数参数是个好主意:
int func(struct foo *f, char * restrict s /*different object*/);
我可以像这样删除signed和unsigned char变量的restrict关键字吗?
int sfunc(struct foo *f, signed char *s /*different object*/);
int ufunc(struct foo *f, unsigned char *s /*different object*/);
如果同一类型的有符号和无符号指针可以互相别名,那么如果我希望一个指向int的指针和一个指向unsigned的指针应该指向不同的对象,那么int *
和unsigned *
参数是否都应该被限定为restrict
?
/* i and u should be different */
int uifunc(int * /*restrict?*/ i, unsigned * /*restrict?*/ u);
restrict
关键字并不重要(虽然它作为文档说明),只有函数定义中的版本才有效。 - M.M