以下原型之间有什么实际区别吗?
void f(const int *p);
void f(const int *restrict p);
void f(const int *volatile p);
Run Code Online (Sandbox Code Playgroud)
C11 6.7.6.3/15 节(最后一句)指出,为了确定类型兼容性,不考虑顶级限定符,即允许函数定义在其参数上具有与原型不同的顶级限定符宣言了。
然而(与 C++ 不同)它并没有说它们被完全忽略。在这种情况下,const这显然是没有意义的;volatile然而,在和的情况下restrict也许可能存在差异。
例子:
void f(const int *restrict p);
int main()
{
int a = 42;
const int *p = &a;
f(p);
return a;
}
Run Code Online (Sandbox Code Playgroud)
原型中的存在是否restrict允许编译器优化afor的读取return a;?
(相关问题)