【发布时间】:2021-03-01 20:55:35
【问题描述】:
我想知道是否可以将 restrict 关键字仅包含在函数定义中,而不是像这样的函数声明中:
void foo(char *bar);
void foo(char * restrict bar)
{
// do something
}
由于foo 只接受一个参数,任何指针别名都必须在foo 内进行。调用函数的人不需要知道restrict 修饰符。像const一样,只在函数声明中省略关键字可以吗?
【问题讨论】:
-
注意:这些声明不是针对个人的,而是针对编译器的。
-
"调用函数的人不需要知道限制修饰符" --> 不是这样。考虑
int fred[42]; foo(fred)和foo()与全局fred[]混淆。该调用违反了restrict。 -
@chux-ReinstateMonica 为什么会这样?我认为只要函数内部没有像
char *p = bar这样的事情发生就可以了。 -
@tadman: 函数定义中的
restrict用于编译器,但声明中的参数restrict用于程序员,编译器会忽略它。