相关疑难解决方法(0)

使用char *,unsigned char *和signed char *的别名

一个char *(合格的变体)可以别名任何东西。是signed char *unsigned char *(和他们的合格变种)从此免除?

换句话说,如果我不希望restrictchar*函数参数用作其他类型的指针参数的别名(因为它们可以对它们进行别名),则将其应用于函数参数是一个好主意:

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)

c strict-aliasing

7
推荐指数
1
解决办法
459
查看次数

标签 统计

c ×1

strict-aliasing ×1