在函数中重载全局变量
Overloading global variable in function
CAPL 中的全局变量在函数或测试函数中再次初始化时发生了什么?
variables
{
int i;
}
testfunction temp()
{
int i = 0;
for(i = 0; i < 10; i++)
{
// do something
}
}
for(i = 0; i < 5; i++)
{
temp();
}
在 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 like' 作用域规则:如果两个标识符具有相同的名称但作用域不同,则内部作用域中的标识符 隐藏 外部作用域中的标识符。
在这个例子中,函数temp中的对象xyz隐藏了全局变量xyz:
on key * // call event
{
xyz=10;
write("Outer Scope -> %d",xyz); // Program Scope
temp(); // Function Scope
}
输出:
- " 内部范围 -> 5 "
- " 外部范围 -> 10 "
CAPL 中的全局变量在函数或测试函数中再次初始化时发生了什么?
variables
{
int i;
}
testfunction temp()
{
int i = 0;
for(i = 0; i < 10; i++)
{
// do something
}
}
for(i = 0; i < 5; i++)
{
temp();
}
在 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 like' 作用域规则:如果两个标识符具有相同的名称但作用域不同,则内部作用域中的标识符 隐藏 外部作用域中的标识符。
在这个例子中,函数temp中的对象xyz隐藏了全局变量xyz:
on key * // call event
{
xyz=10;
write("Outer Scope -> %d",xyz); // Program Scope
temp(); // Function Scope
}
输出:
- " 内部范围 -> 5 "
- " 外部范围 -> 10 "