본문으로 건너뛰기

전역 변수

FunC 프로그램은 기본적으로 함수 선언/정의와 전역 변수 선언의 목록입니다. 이 섹션에서는 두 번째 주제를 다룹니다.

전역 변수는 변수 유형과 변수 이름 뒤에 글로벌 키워드를 사용하여 선언할 수 있습니다. 예를 들어

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라는 세 개의 샘플 정수에 대해 덧셈의 연관성을 확인하는 간단한 프로그램입니다.

내부적으로 글로벌 변수는 TVM의 c7 제어 레지스터에 저장됩니다.

전역 변수의 유형은 생략할 수 있습니다. 이 경우 변수의 용도에서 유추할 수 있습니다. 예를 들어 다음과 같이 프로그램을 다시 작성할 수 있습니다:

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 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에 대한 할당입니다(이 효과에 대한 설명은 statements에서 찾을 수 있습니다).