【PL理论】(24) C- 语言:有块的作用域 | 更新的语法 | 新的语义域 | 环境 vs. 内存

  • 💭 写在前面:我们将再次扩展之前的C语言,让我们向这种语言引入“作用域”的概念。

目录

0x00 C- 语言:有块的作用域

0x01 C- 语言:更新的语法

0x02 新的语义域

0x03 环境 vs. 内存


0x00 C- 语言:有块的作用域

现在,你必须在使用变量之前先声明它!

同样,你可以拥有一个变量,它是在 if while 语句的块 { } 中局部的。

下面是一个用新的 C- 写的示例程序,请注意,我们有像 var x = 5 这样的声明

var x = 5;
var i = 1;
var s = 0;

while (i < 10) {
  var x = i + i;  // 这个 x 只在循环内部绑定
  s = s + x;
  i = i + 1
};
x = x + s   // 'x' 将会变成 5 + 90 = 95

0x01 C- 语言:更新的语法

为简化起见,这次我不会介绍指针的概念给 C-

相反,我们有了变量声明的语句,必须同时声明和初始化。

0x02 新的语义域

值的域与之前相同:

\color{} v\in Val=Z+B

现在程序状态包括环境和内存,语句的执行将改变这个状态:

\color{} \rho \in Env=Var\rightarrow Loc
\color{} M\in Mem=Loc\rightarrow Val

𝑳𝒐𝒄 是一组有效的内存位置 (地址),即 \color{} Loc=\left \{ l_1,l_2,...,l_N \right \},其中 \color{} N 是最大内存大小。

下面,我们来更仔细地看一下环境和内存。

0x03 环境 vs. 内存

在函数式语言中,环境通常直接将一个名称映射到一个值。

在具有内存的命令式语言中,环境通常将一个名称映射到内存位置 (地址) 。

然后,内存将每个位置映射到一个值,在下面的图中,\color{} l_1,l_2,l_2 表示内存位置。

在先前的示例中,当 inner \color{} x 被声明时,这些状态应该如何改变?

var x = 5;
var i = 1;
var s = 0;
while (i < 10) {
    var x = i + i;
    ...
}

在先前的示例中,当内部 \color{} x 被声明时,这些状态应该如何改变?

  • 名称 x 必须更改为指向新的位置 \color{} l_4
  • 并且必须创建一个新的内存插槽
  • 请注意,\color{} l_1 的内存插槽仍然存在内存中


📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2024.6.10
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

相关推荐

  1. C语言作用与生命周期

    2024-06-16 23:58:02       55 阅读
  2. c语言中,局部变量作用是?

    2024-06-16 23:58:02       35 阅读
  3. C语言作用规则

    2024-06-16 23:58:02       46 阅读
  4. c语言

    2024-06-16 23:58:02       27 阅读
  5. Perl语法作用:深入探索变量隐秘世界

    2024-06-16 23:58:02       31 阅读
  6. Go语言基本语法(四)函数与变量作用

    2024-06-16 23:58:02       33 阅读
  7. final内存语义

    2024-06-16 23:58:02       48 阅读
  8. C语言变量作用,生命周期和链接相关

    2024-06-16 23:58:02       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-16 23:58:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-16 23:58:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-16 23:58:02       87 阅读
  4. Python语言-面向对象

    2024-06-16 23:58:02       96 阅读

热门阅读

  1. 关于指针的一次错误调用

    2024-06-16 23:58:02       34 阅读
  2. SqlSugar 集成

    2024-06-16 23:58:02       27 阅读
  3. 力扣1482.制作m束花所需的最少时间

    2024-06-16 23:58:02       34 阅读
  4. 记录碰到的json转换异常

    2024-06-16 23:58:02       29 阅读
  5. 网络安全sql注入实战演示

    2024-06-16 23:58:02       28 阅读
  6. Python 调用 C 和 C 调用 Python 方法

    2024-06-16 23:58:02       33 阅读