Перегрузка глобальной переменной в функции - PullRequest
0 голосов
/ 11 июля 2019

Что происходит с глобальной переменной в CAPL, когда она снова инициализируется в функции или тестовой функции?

variables
{
    int i;
}

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

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

1 Ответ

0 голосов
/ 15 июля 2019

В Переменные раздел CAPL, объявлены глобальные переменные.Определенные здесь идентификаторы имеют область действия программы.Глобальная переменная может быть доступна любой функции всей вашей программы после ее объявления.

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», поэтому: Если два идентификатора имеют одинаковое имя, но различную область действия, идентификатор во внутренней области действия скрывает идентификатор во внешней области видимости.

В этом примере объект xyz в функции temp скрывает глобальную переменную xyz:

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

Вывод:

  • "Внутренняя сфера -> 5 "
  • "Внешняя сфера -> 10 "
...