将限制限定的指针参数分配给本地的限制限定变量

时间:2016-01-29 19:12:00

标签: c pointers restrict

阅读C标准,6.7.3.1" restrict "的正式定义后,我有以下误解。我想知道以下代码是否会立即导致未定义的行为:

void foo(int *restrict p) {
  int *restrict q = p;
}

很明显,q被赋予了基于另一个受限指针p的值。不清楚的是,这两个指针是否与同一个块(函数本身)相关联,或者与不同的块(p与函数本身,q及其复合语句体)相关联,因为,例如

int *restrict p;
{
  int *restrict q = p;
}

不会导致未定义的行为(可以在子块中创建别名指针)。

MSVC++ restrict keyword and local variables中的最佳答案表明int *restrict q = p + 1;会很好,但是[至少在C标准的情况下]它不正确,因为表达式p + 1仍然基于p

该块的定义见6.7.3.1 p2:

  
      
  1. 如果 [某个指针声明] D 出现在一个块内,并且没有存储类 extern ,让 B 表示该块。如果 D 出现在函数定义的参数声明列表中,请 B 表示关联的块。 [...]
  2.   

&#34>相关的块"函数体在这个上下文中与函数体相同吗?因为我没有立即找到任何关于术语"相关块"的解释。在本文前面。

0 个答案:

没有答案