【问题标题】:Overloading global variable in function在函数中重载全局变量
【发布时间】:2019-07-11 10:34:33
【问题描述】:

CAPL 中的全局变量在函数或 testfunction 中再次初始化时发生了什么?

variables
{
    int i;
}

testfunction temp()
{
    int i = 0;
    for(i = 0; i < 10; i++)
    {
        // do something
    }
}

for(i = 0; i < 5; i++)
{
    temp();
}

【问题讨论】:

  • 将其粘贴到 CAPL 文件中并试一试怎么样?

标签: function global-variables capl


【解决方案1】:

在 CAPL 的 Variables 部分,声明了全局变量。此处定义的标识符具有程序范围。全局变量在声明后可以被整个程序的任何函数访问。

variables
{
    int xyz; // Identifier 'xyz' declared in an program scope
}

第二个标识符在函数范围内声明,与前一个标识符不同。函数作用域有更多的内部作用域。

void temp()
{
    int xyz; // Identifier 'xyz' declared in an function scope 
    xyz=5;
    write("Inner scope -> d%",xyz);
}

CAPL 设置了“C 类”范围规则,因此:如果两个标识符具有相同名称但范围不同,则内部范围中的标识符隐藏外部范围中的标识符。

在这个例子中,函数 temp 中的对象 xyz 隐藏了全局变量 xyz:

on key * // call event
{
  xyz=10;
  write("Outer Scope -> %d",xyz);  //  Program Scope
  temp();                          //  Function Scope
}

输出:

  • " 内部范围 -> 5 "
  • " 外部范围 -> 10 "

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多