Перейти к основному содержимому

Глобальные переменные

warning

Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.

Программа FunC, по сути, представляет собой список объявлений функций/определений и глобальных переменных. В этом разделе рассматривается вторая тема.

Глобальная переменная может быть объявлена ​​с помощью ключевого слова global, за которым следует тип переменной и имя переменной. Например,

global ((int, int) -> int) op;

int check_assoc(int a, int b, int c) {
return op(op(a, b), c) == op(a, op(b, c));
}

int main() {
op = _+_;
return check_assoc(2, 3, 9);
}

это простая программа, которая записывает в глобальную функциональную переменную op оператор сложения _+_ и проверяет ассоциативность сложения трех выборочных целых чисел; 2, 3 и 9.

Внутренне глобальные переменные хранятся в регистре управления c7 TVM.

Тип глобальной переменной можно не указывать. Если это так, то это будет определено на основе использования переменной. Например, мы можем переписать программу следующим образом:

global op;

int check_assoc(int a, int b, int c) {
return op(op(a, b), c) == op(a, op(b, c));
}

int main() {
op = _+_;
return check_assoc(2, 3, 9);
}

Можно объявить несколько переменных после одного и того же ключевого слова global. Следующие коды эквивалентны:

global int A;
global cell B;
global C;
global int A, cell B, C;

Запрещено объявлять локальную переменную с тем же именем, что и у уже объявленной глобальной переменной. Например, этот код не будет скомпилирован:

global cell C;

int main() {
int C = 3;
return C;
}

Обратите внимание, что следующий код правильный:

global int C;

int main() {
int C = 3;
return C;
}

но здесь int C = 3; эквивалентно C = 3;, т. е. это присвоение глобальной переменной C, а не объявление локальной переменной C (вы можете найти объяснение этого эффекта в выражениях).