C范围重叠

时间:2017-11-18 22:19:36

标签: c scope language-lawyer

C标准声明(强调我的):

  

如果标识符指定同一名称空间中的两个不同实体,则范围可能重叠。 [...]

(来自http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf的第6.2.1.4节)

标识符什么时候可以引用两个不同的实体,但它们的范围不重叠?

或者换句话说,为什么引号中有“可能”这个词?

3 个答案:

答案 0 :(得分:3)

将其读作“如果标识符指定同一名称空间中的两个不同实体,则范围可能会重叠。”也就是说,该句子表示范围可能重叠,并且它正在解释发生这种情况的条件。遗憾的是,英语不精确。这句话并不意味着表示如果标识符指定同一名称空间中的两个实体的逻辑陈述,则存在它们重叠的程序以及它们不存在的程序。它表示范围可能重叠,以及当标识符在同一名称空间中指定两个不同实体时发生这种情况。

答案 1 :(得分:2)

name的这些范围重叠:

int f(void) {
  int name = 4;
  {
     int name = 6;
  }
}

这些不重叠:

int f(void) {
  {
     int name = 4;
  }
  {
     int name = 6;
  }
}

答案 2 :(得分:0)

我认为这个词可能指的是一般情况的可能性,而不是hapening的概率(这意味着允许发生,并且当它发生时会有重叠)。 以下几行通过告诉在这种情况下发生的事情(内部范围将是外部范围的严格子范围,并且在此范围内,我们将使用在此内部范围内定义的intety