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

C 변수 완전 이해: 선언, 정의, 초기화, 저장 클래스, Lvalue/Rvalue

변수는 메모리 공간에 붙이는 이름입니다. 타입, 저장 클래스, 스코프, 링키지, 수명 등 변수의 모든 속성을 체계적으로 정리합니다.

변수 정의 vs 선언

한 프로그램에서 정의는 한 번만 가능, 선언은 여러 번 가능.

기본 변수 타입

구분설명메모리 할당예시
정의(Definition)저장 공간 생성, 초기화 가능예int x = 10;
선언(Declaration)이름과 타입만 알림, extern 사용아니오extern int x;

변수 초기화

// 선언과 동시에 초기화 (정의)
int a = 10;
double pi = 3.14159;
char grade = 'A';
const int MAX = 100;  // 상수화

// 다중 초기화
int x = 1, y = 2, z = 3;

// 배열/구조체 초기화
int scores[5] = {90, 85, 100, 78, 92};
struct Point { int x, y; } p = {10, 20};

초기화되지 않은 변수의 값

타입크기용도서식
char1바이트문자/작은 정수%c %hhd
int4바이트 (일반)일반 정수%d
float4바이트단정밀 실수%f
double8바이트배정밀 실수 (기본 권장)%lf
void-값 없음 (변수 선언 불가)-
저장 기간초기값
정적 저장 기간 (전역, static)0 / NULL / 0.0 / '\0' (자동 0 초기화)
자동 저장 기간 (지역, auto)불확정값 (쓰레기 값) - 반드시 직접 초기화
동적 할당 (malloc)불확정값 (calloc은 0 초기화)

변수 스코프 (Scope) & 링키지 (Linkage)

스코프 예제

int global = 100;           // 전역 변수 (외부 링키지)
static int file_static = 200; // 파일 내부 전역 (내부 링키지)

void func(int param) {      // 매개변수 (함수 스코프)
    int local = 10;         // 자동 지역 변수
    static int counter = 0; // 정적 지역 변수 (값 유지)
    counter++;
    printf("local=%d, param=%d, counter=%d\n", local, param, counter);
}

int main() {
    int local = 20;         // main의 지역 변수
    func(local);            // param=20, local=10, counter=1
    func(local);            // param=20, local=10, counter=2
    // func의 local, param 접근 불가
    // global, file_static 접근 가능
}

Lvalue vs Rvalue

종류선언 위치스코프링키지수명키워드
지역 변수블록 내부블록없음블록 진입~종료auto (생략 가능)
전역 변수함수 외부파일 (전역)외부프로그램 전체(기본)
정적 전역함수 외부 + static파일내부프로그램 전체static
정적 지역블록 내부 + static블록없음프로그램 전체static
외부 참조함수 외부 + extern파일외부정의된 곳과 동일extern
매개변수함수 헤더함수 본문없음함수 호출~반환-
int a = 10;   // a는 lvalue, 10은 rvalue
a = 20;       // OK: lvalue = rvalue
// 10 = a;    // Error: rvalue = lvalue
int *p = &a;  // OK: a는 lvalue
// int *q = &(a + 1); // Error: a+1은 rvalue

저장 클래스 지정자 (Storage Class Specifiers)

구분Lvalue (좌변값)Rvalue (우변값)
정의메모리 위치를 가진 표현식값만 가진 표현식 (임시 값)
대입 가능왼쪽에 올 수 있음왼쪽에 올 수 없음
주소 연산&lvalue 가능&rvalue 불가
예시변수, *ptr, arr[i], struct.field리터럴, x+1, func(), 3

const 한정자

모범 사례

C 언어

  1. C# 변수와 기본 데이터 타입 완벽 가이드
  2. C# 변수 범위(Scope) 이해: 클래스, 메서드, 블록 레벨
  3. C++ 변수, 리터럴, 상수 마스터하기: 종합 가이드
  4. C 변수, 상수, 리터럴: 완전 가이드
  5. C 저장 클래스 이해: 범위, 생명주기, 성능
  6. 파이썬 global 키워드 마스터하기: 사용법과 타이밍
  7. Java 변수와 리터럴: 종합 가이드
  8. C++ 변수와 데이터 타입: int, double, char, string, bool 전문가 가이드
  9. Verilog 할당문 이해: 유형, 문법, 모범 사례
  10. Java 변수 타입 이해: 종합 가이드
지정자적용 대상효과
auto지역 변수기본값, 생략 가능 (C11부터 타입 추론용으로 재정의됨)
register지역 변수레지스터 할당 힌트, & 불가, 현대 컴파일러가 자동 최적화
static지역/전역지역: 값 유지, 전역: 내부 링키지
extern전역/함수다른 파일 정의 참조, 초기화 불가
_Thread_local (C11)전역/정적 지역스레드별 독립 복사본