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

C 저장 클래스 완전 분석: auto, register, static, extern, _Thread_local

저장 클래스는 변수/함수의 스코프(가시 범위), 수명(생존 기간), 링키지(연결 방식), 메모리 위치를 결정합니다. 5가지 저장 클래스 지정자를 마스터하세요.

저장 클래스 비교표

지정자적용 위치스코프수명링키지초기값메모리
auto블록 내부블록블록 진입~종료없음불확정스택
register블록 내부블록블록 진입~종료없음불확정레지스터/스택
static (지역)블록 내부블록프로그램 전체없음0/NULL데이터/BSS
static (전역)파일 범위파일프로그램 전체내부0/NULL데이터/BSS
extern (전역)파일 범위파일/전역프로그램 전체외부0/NULL (정의 시)데이터/BSS
_Thread_local파일/블록해당 범위스레드 수명따름0/NULLTLS 영역

auto - 자동 저장 기간 (기본값)

register - 레지스터 힌트

static - 정적 저장 기간

정적 지역 변수

int counter() {
    static int count = 0;  // 최초 호출 시만 0 초기화
    return ++count;
}

int main() {
    printf("%d %d %d\n", counter(), counter(), counter()); // 1 2 3
}

정적 전역 변수 / 함수

// file1.c
static int internal_var = 42;      // 다른 파일에서 보이지 않음
static void helper() { ... }       // 내부 함수

int public_api() { return internal_var; } // 외부 공개

extern - 외부 링키지

다중 파일 예제

// main.c
#include <stdio.h>
extern int shared_value;      // 참조 선언
extern void print_value(void);

int main() {
    shared_value = 42;
    print_value();
    return 0;
}

// support.c
#include <stdio.h>
int shared_value = 0;         // 정의 (초기화 여기)

void print_value(void) {
    printf("Value: %d\n", shared_value);
}
$ gcc main.c support.c -o app
$ ./app
Value: 42

_Thread_local (C11) - 스레드 지역 저장소

_Thread_local int tls_counter = 0;

void *thread_func(void *arg) {
    for (int i = 0; i < 3; i++) {
        printf("Thread %ld: %d\n", (long)arg, ++tls_counter);
    }
    return NULL;
}
// 각 스레드가 독립적으로 1,2,3 출력

함수 저장 클래스

모범 사례

C 언어

  1. C++ 클래스와 객체: 객체지향 프로그래밍 실전 가이드
  2. C++ 프렌드 함수와 프렌드 클래스: 접근 제어 마스터하기
  3. C 저장 클래스 이해: 범위, 생명주기, 성능
  4. C++ 구조체 vs 클래스: 임베디드 개발자를 위한 실용 가이드
  5. Python str.count() 마스터하기: 문자 및 부분문자열 개수 세기 예제
  6. 파이썬 list.count() 전문가 가이드: 실전 예제로 배우는 요소 개수 세기
  7. Java 마스터하기: 객체, 클래스, 핵심 OOP 개념 이해
  8. C++ 저장 클래스 완벽 가이드: 범위, 수명, 용법
  9. C++ 인터페이스: 추상 클래스와 순수 가상 함수 마스터하기
  10. C# 클래스 마스터하기: 객체 지향 프로그래밍의 청사진
지정자의미
(기본)외부 링키지, 모든 파일에서 호출 가능
static내부 링키지, 해당 파일에서만 호출 가능
inline (C99)인라인 치환 힌트, 정의는 헤더에, 외부 정의 별도 필요
_Noreturn (C11)반환하지 않는 함수 (exit, abort 등), 최적화 힌트