산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C 스코프 규칙: 지역, 전역, 정적, 매개변수 변수의 가시성과 수명

스코프(Scope)는 식별자(변수, 함수 등)가 참조 가능한 프로그램 영역입니다. C는 블록 스코프, 파일 스코프, 함수 프로토타입 스코프를 가지며, 저장 클래스와 결합해 수명과 링키지를 결정합니다.

스코프의 4가지 종류

변수 종류별 상세

1. 지역 변수 (Local Variables) - 블록 스코프

void demo() {
    int x = 10;          // 외부 블록 x
    if (x > 0) {
        int x = 20;      // 내부 블록 x (외부 x 가림)
        printf("%d\n", x); // 20
    }
    printf("%d\n", x);   // 10
}

2. 전역 변수 (Global Variables) - 파일 스코프

int global_counter = 0;  // 정의 + 외부 링키지

void increment() { global_counter++; }
int get_count() { return global_counter; }

3. 정적 전역 변수 (Static Global) - 내부 링키지

// utils.c
static int cache[100];        // 이 파일에서만 접근 가능
static void init_cache() { ... } // 내부 함수

void public_api() { ... }     // 헤더에 선언, 외부 공개

4. 정적 지역 변수 (Static Local)

int next_id() {
    static int id = 0;  // 프로그램 시작 시 0 초기화
    return ++id;        // 1, 2, 3, ... 반환
}

5. 매개변수 (Parameters) - 함수 스코프

int value = 100;  // 전역

void func(int value) {  // 매개변수 value (전역 value 가림)
    printf("%d\n", value); // 매개변수 출력
}

이름 공간 (Name Spaces) - C는 여러 이름 공간 분리

스코프 종류시작끝대상
블록 스코프선언 지점포함 블록 }지역 변수, 매개변수, 루프 변수(C99)
파일 스코프선언 지점번역 단위 끝전역 변수, 함수, 파일 내부 static
함수 프로토타입 스코프프로토타입 내프로토타입 끝함수 선언의 매개변수 이름
함수 스코프함수 본문함수 본문 끝레이블 (goto 대상)

→ struct stat stat; 가능 (태그 공간 vs 일반 공간 분리)

링키지 (Linkage) - 다중 파일 연결

이름 공간포함 식별자예시
레이블goto 대상label:
태그struct/union/enum 태그struct Foo
멤버구조체/공용체 멤버s.member (태그별 별도)
일반변수, 함수, typedef, 열거 상수int x; void func();

스코프 모범 사례

수명 요약

프로그램 시작
  ├─ 전역/정적 변수: 메모리 할당, 0 초기화
  └─ main() 진입
       ├─ 자동 변수: 스택 할당, 초기화 코드 실행
       ├─ 함수 호출 → 스택 프레임 푸시
       │    ├─ 매개변수, 자동 변수 생성
       │    ├─ 정적 지역: 최초 1회 초기화
       │    └─ 반환 → 스택 프레임 팝, 자동 변수 소멸
       └─ main() 반환
            └─ 전역/정적 변수: 프로그램 종료 시 소멸 (소멸자 없음)

C 언어

  1. 직렬 회로의 핵심 규칙: 전류, 저항, 전압
  2. 병렬 회로의 기초: 전압, 저항, 전류 규칙
  3. 필수 도함수 규칙 퀵 레퍼런스
  4. 기본 역도함수 규칙: 상수, 합, 차
  5. C# 변수와 기본 데이터 타입 완벽 가이드
  6. C# 변수 범위(Scope) 이해: 클래스, 메서드, 블록 레벨
  7. C++ 변수, 리터럴, 상수 마스터하기: 종합 가이드
  8. C 변수, 상수, 리터럴: 완전 가이드
  9. C 저장 클래스 이해: 범위, 생명주기, 성능
  10. Java 변수와 리터럴: 종합 가이드
링키지의미키워드예시
외부전체 프로그램에서 동일 객체 참조(기본), extern전역 변수, 함수
내부동일 번역 단위 내 동일 객체 참조static (파일 범위)정적 전역, 정적 함수
없음링키지 없음, 각 선언 별개 객체static (블록), 매개변수지역 변수