相关疑难解决方法(0)

函数原型中的顶级 volatile 或 limit 是否重要?

以下原型之间有什么实际区别吗?

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;

相关问题

c qualifiers language-lawyer restrict-qualifier

5
推荐指数
1
解决办法
571
查看次数