如何计算物体的总跨度?

时间:2014-10-06 16:09:16

标签: variables language-agnostic scope metrics

以下代码中变量s的总范围是多少?

1: procedure sum(array: integer_array)
2:     var s: integer;
3: begin
4:     s := 0;
5:     for i in array'range loop
6:         s := s + array(i);
7:     end loop;
8: end;

我看到的方式有两种可能的解释:

  1. 第1行中的声明将计为参考,然后 total_span(s) = 1
  2. 第1行中的声明计算为参考,然后 total_span(s) = 3
  3. 以下两个常见定义有助于澄清问题:

    • 变量总跨度是引用它的第一个语句到引用它的最后一个语句之间的代码行数。 (这就是McConnell在代码完成中所谓的实时时间,其中使用包含限制的次要差异因此实时时间 = 总范围 + 2)
    • 变量的平均跨度是两个连续引用变量之间的平均代码行数

    请注意,这些概念与内存分配,范围或代码中可以的变量无关。这些是指代代码中实际使用变量的指标。

2 个答案:

答案 0 :(得分:1)

我对此的看法是声明不计,但初始化计数。

使用你的例子,第2行的声明不计算,因为变量在第4行之前没有被初始化,这意味着在此之前它不能被“实时”计算。

在某些情况下,声明构成隐式初始化(​​例如,具有默认构造函数的类型的对象的C ++声明)。在这些情况下,声明和初始化发生在同一行,这意味着声明的行应该被认为是变量的第一次使用。

答案 1 :(得分:0)

在这里回答这个问题,也许这会有所帮助:“这个问题的范围”。这里是2,平均跨度也是2。