限制结构内的关键字和指针

时间:2012-11-09 11:22:41

标签: c function struct restrict-qualifier

使用restrict关键字,如下所示:

int f(int* restrict a, int* restrict b);

我可以指示编译器数组a和b不重叠。说我有一个结构:

struct s{
(...)
int* ip;
};

并编写一个带有两个struct s对象的函数:

int f2(struct s a, struct s b);

在这种情况下,我如何能够类似地指示编译器a.ipb.ip不重叠?

2 个答案:

答案 0 :(得分:15)

您还可以在结构中使用restrict

struct s {
    /* ... */
    int * restrict ip;
};

int f2(struct s a, struct s b)
{
    /* ... */
}

因此,编译器可以假设a.ipb.ip用于在f2函数的每次调用期间引用不相交的对象。

答案 1 :(得分:-1)

检查此指针示例,您可能会得到一些帮助。

// xa and xb pointers cannot overlap ie. point to same memmpry location.
void function (restrict int *xa, restrict int *xb)
{
    int temp = *xa;
    *xa = *xb;
    xb = temp;
}

如果两个指针被声明为restrict,那么这两个指针不会重叠。

<强> EDITED

Check this link for more examples