限制返回类型和局部变量

时间:2015-01-31 23:32:26

标签: c restrict-qualifier

我很清楚何时对函数参数使用restrict。但到目前为止我发现的所有文章都没有提到其他声明(比如函数返回值和局部变量)。

以下是一个例子:

extern int *alloc_foo(void);
extern int *alloc_bar(void);

int *foo = alloc_foo();
foo[i] = 42;
int *bar = alloc_bar();
f(foo[i]);

如果保证alloc_foo()和alloc_bar()保证返回非别名地址(比如有malloc的包装器),我应该让它们返回restrict吗? 我应该制作foo和bar限制吗?

1 个答案:

答案 0 :(得分:4)

返回restrict没有意义,就像返回constvolatile一样。这是因为函数的返回值纯粹是表达式(“rvalue”),而不是表示对象(“左值”)的表达式。我不知道如何在没有GCC属性的函数类型中编码非别名的知识(你可以将函数标记为malloc - ),但调用者可以自由地将结果存储在restrict - 限定指针对象,从而为编译器提供这方面的知识。