大佬教程收集整理的这篇文章主要介绍了在函数原型中是顶级易失性还是限制性的?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
void f(const int *p); void f(const int *reStrict p); void f(const int *volatile p);
C11 6.7.6.3/15(最后一句)部分说明顶层限定符不是为了确定类型兼容性而考虑的,即允许@L_618_0@定义在其参数上具有与原型不同的顶级限定符.声明了.
然而(与C不同)它并没有说它们被完全忽略了.在const的情况下,这显然没有实际意义;但是在挥发性和限制的情况下可能存在差异.
void f(const int *reStrict p); int main() { int a = 42; const int *p = &a; f(p); return a; }
原型中是否存在reStrict允许编译器优化读取a for return a; ?
static int b; void f(const int *p) { b = *p + 1; } int main() { int a = 42; const int *p = &a; f(p); return a; }
如果我按原样编译它,我得到
f(int const*): pushq %rbp movq %rsp,%rbp movq %rdi,-8(%rbp) movq -8(%rbp),%rax movl (%raX),%eax addl $1,%eax movl %eax,b(%rip) popq %rbp ret main: pushq %rbp movq %rsp,%rbp subq $16,%rsp movl $42,-12(%rbp) leaq -12(%rbp),%rax movq %rax,%rdi call f(int const*) movl -12(%rbp),%eax leave ret
如果我使用void f(const int * __ reStrict__ p)编译它,%eax leave ret
如果我使用void f(const int * __ volatile__ p)编译它,我得到了
f(int const*): pushq %rbp movq %rsp,%eax leave ret
所以在实践中它们似乎也在C中被忽略了.
以上是大佬教程为你收集整理的在函数原型中是顶级易失性还是限制性的?全部内容,希望文章能够帮你解决在函数原型中是顶级易失性还是限制性的?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。