一个char *(合格的变体)可以别名任何东西。是signed char *和unsigned char *(和他们的合格变种)从此免除?
换句话说,如果我不希望restrict将char*函数参数用作其他类型的指针参数的别名(因为它们可以对它们进行别名),则将其应用于函数参数是一个好主意:
int func(struct foo *f, char * restrict s /*different object*/);
Run Code Online (Sandbox Code Playgroud)
可以restrict像这样删除带符号和无符号char变体的关键字吗?
int sfunc(struct foo *f, signed char *s /*different object*/);
int ufunc(struct foo *f, unsigned char *s /*different object*/);
Run Code Online (Sandbox Code Playgroud)
同样,指向相同类型的有符号和无符号变量的指针是否也可以互为别名?换句话说,如果我期望一个指向int的指针和一个指向unsigned的指针,并且它们应该指向不同的对象,则int *和unsigned *参数应该都被restrict限定吗?
/* i and u should be different */
int uifunc(int * /*restrict?*/ i, unsigned * /*restrict?*/ u);
Run Code Online (Sandbox Code Playgroud)