C_역할 영역, 링크 속성 및 저장 유형
7034 단어 C 언어
1.1 개요
변수는 프로그램의 어느 부분에서 성명할 때 프로그램의 일정한 구역 내에서만 접근할 수 있고 이 구역은 작용역이 된다.작용역은 파일 작용역, 함수 작용역, 코드 블록 작용역과 원형 작용역으로 네 가지로 나뉜다.컴파일러는 변수가 성명한 위치를 통해 작용역을 확정한다
1.2 파일 역할 영역
변수가 모든 코드 블록 밖에서 성명될 때 파일 역할 영역에 있고 파일 역할 영역의 범위는 변수 성명에서 파일의 끝까지 이어집니다.그러나 ".h"파일에 선언이 있고 해당 파일이 다른 파일에 #include로 포함되어 있으면 해당 변수의 역할 영역도 파일을 포함하는 끝으로 확대됩니다.
1.3 함수 역할 영역
함수 작용역은 문장 라벨에만 적용되고 문장 라벨은 goto 문장에 사용됩니다.함수 역할 영역 내의 문장 라벨은 유일해야 합니다.
1.4 코드 블록 역할 영역
한 쌍의 괄호 사이의 모든 문장은 코드 블록 작용역이 된다.하나의 코드 블록 역할 영역에서 정의된 변수는 이 코드 블록 내의 모든 문장에 사용할 수 있습니다.다음은 두 가지 상황을 고려한다. 코드 블록 사이의 끼워넣기
{
int a = 100;
{
int a;
}
}
이때 내층의 a는 외층의 a를 숨긴다. 만약에 내층 a의 값을 수정하면 외층의 a에 영향을 주지 않는다.
끼워 넣지 않은 두 개의 코드 블록이 만약 두 개의 코드 블록 사이에 교집합이 없다면, 한 코드 블록의 안의 문장은 다른 코드 블록 내의 변수를 사용할 수 없다.
1.5 원형 작용역
원형 작용역은 함수 성명에 있는 매개 변수 이름에 적용됩니다.
2. 링크 속성
2.1 개요
링크 속성은 서로 다른 파일에 있는 식별자를 어떻게 처리하는지 결정합니다.링크 속성은 모두 세 가지가 있는데 그것이 바로 external(외부), 인터넷(내부), none(없음)이다.
2.2 extern 키워드
externa 키워드를 사용하여 변수를 설명하면, 이 변수가 다른 곳에서 정의되었음을 설명하고, 다른 파일에 있을 수도 있고 현재 파일에 있을 수도 있습니다.이 키워드는 식별자의 링크 속성을 external로 설정합니다
2.3 static 키워드
만약 식별자의 링크 속성이 external이라면static는 링크 속성을 인터넷으로 바꿀 수 있습니다
2.45개의 실험
실험1
//test1.c
int a = 100;
void printfa1()
{
printf("The value of a in test1 : %d", a);
}
//test2.c
int a = 20;
void printfa2()
{
printf("The value of a in test2 : %d", a);
}
//main.c
#include <stdio.h>
#include <stdlib.h>
void printfa1();
void printfa2();
int main()
{
printfa1();
printfa2();
return 0;
}
컴파일러 오류: multiple definition of'a'결론: 서로 다른 파일에 같은 이름의 식별자를 포함할 수 없습니다
실험2 테스트 2.c의 a에 extern 표식자 추가
//test1.c
//test2.c
extern int a;
void printfa2()
{
printf("The value of a in test2 : %d
", a);
}
//main.c
#include <stdio.h>
#include <stdlib.h>
void printfa1();
void printfa2();
int main()
{
printfa1();
printfa2();
extern int a;
a = 10;
printfa1();
printfa2();
return 0;
}
컴파일링을 통해 100과 10을 성공적으로 출력한 것은 3개의 a가 모두 하나의 변수로 결론을 내렸다는 것을 의미한다. extern 키워드를 통해 다른 파일에 정의된 변수에 접근할 수 있다. extern 수식 변수를 사용할 수 없는 동시에 이 변수에 초기 값을 부여하면 컴파일러도 오류를 보고할 수 있다.
error: ‘XX’ has both ‘extern’ and initializer
그 이유는 이 변수가 실제적으로 다른 곳에서 정의되었기 때문에 그에게 초치를 부여할 수 없기 때문이다.
실험3 테스트1.c의 a는static로 수식하고 다른 파일은 변하지 않으며 컴파일은 통과할 수 없습니다.static로 수식한 변수는 성명된 파일에만 사용할 수 있음을 설명하고test1을 계속 수정합니다.c、test2.c와main.c
//test.c
static int a = 100;
void printfa1()
{
extern int a;
printf("The value of a in test1 : %d
", a);
}
//test2.c
int a = 9;
void printfa2()
{
printf("The value of a in test2 : %d
", a);
}
//main.c
#include <stdio.h>
#include <stdlib.h>
void printfa1();
void printfa2();
int main()
{
printfa1();
printfa2();
extern int a;
a = 10;
printfa1();
printfa2();
return 0;
}
출력 100 9 100 10 은 static 로 수식된 변수 가 외부 에 접근할 수 없고 외부 파일 의 동명 변수 를 사용할 수 없다는 것 을 설명한다
실험4 테스트 수정 1.c의 printfa1 함수,static로 수식
//test1.c
static int a = 100;
static void printfa1()
{
extern int a;
printf("The value of a in test1 : %d
", a);
}
컴파일 오류,main 함수의 printfa1에 정의되지 않았습니다. 이 함수는 정의된 파일에서만 사용할 수 있음을 설명합니다
3. 저장 유형
3.1 개요
저장 유형은 일반 메모리, 운행 시 메모리와 하드웨어 레지스터로 나뉜다.
4.static 키워드
static가 코드 블록 이외에 사용될 때,static는 식별자의 링크 속성을 수정하는 데 사용되며, external에서 static로 변경되며,static가 코드 블록 내부를 사용할 때,static는 식별자의 저장 형식을 수정하고, 자동 변수에서 정적 변수로 변경합니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.