Глобальные переменные
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @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
(вы можете найти объяснение этого эффекта в выражениях).