\static 키워드는 C언어에서 변수와 함수의 저장 기간(Storage Duration)과 링크 특성(Linkage)을 제어하는 키워드이다.
static 변수란?
선언된 함수 내에서만 사용이 가능하며, 단 한 번만 초기화하여 프로그램이 종료될 때까지 메모리 공간에 존재한다.
#include <stdio.h>
void counter() {
static int count = 0; // static 변수는 함수가 종료되어도 값을 유지한다.
count++;
printf("Count: %d\n", count);
}
int main() {
counter(); // 출력: Count: 1
counter(); // 출력: Count: 2
counter(); // 출력: Count: 3
return 0;
}
특징
- 선언된 함수 내에서만 접근이 가능하다.
- 프로그램 시작과 동시에 할당 및 초기화가 된다.
- 프로그램 종료 시까지 메모리 공간에 존재한다.
static 함수란?
함수에 static를 사용하면 해당 함수는 내부 링크(internal linkage)를 가지게 되어 해당 파일 내에서만 호출이 가능하게 된다.
캡슐화를 통해 코드의 안전성을 높이는데 도움이 된다.
예시1)
// function.c
#include <stdio.h>
void external_function() {
printf("This is external_function");
}
static void internal_function() {
// 이 함수는 이 파일 내에서만 호출할 수 있다.
printf("This is internal_function");
}
// function.h
#ifndef FUNCTION_H
#define FUNCTION_H
#include <stdio.h>
void internal_function();
void external_function();
#endif /* FUNCTION_H */
// main.c
#include <stdio.h>
#include "function.h"
int main() {
printf("main.c started");
external_function(); // This is external_function
internal_function(); // error
}
예시2)
// function.c
#include <stdio.h>
void external_function() {
printf("This is external_function");
internal_function();
}
static void internal_function() {
// 이 함수는 이 파일 내에서만 호출할 수 있다.
printf("This is internal_function");
}
// function.h
#ifndef FUNCTION_H
#define FUNCTION_H
#include <stdio.h>
void internal_function();
void external_function();
#endif /* FUNCTION_H */
// main.c
#include <stdio.h>
#include "function.h"
int main() {
printf("main.c started");
external_function(); // This is external_function
// Thus is internal_function
}
external_function() 안에 internal_function()이 포함되어 직접 호출이 아닌 간접 호출로 간주되어 호출이 가능하다.
728x90
'C언어' 카테고리의 다른 글
[C언어] 댕글링 포인터(Dangling Pointer)란? (0) | 2024.10.15 |
---|---|
[C언어] main문이란? (0) | 2024.10.14 |
[C언어] volatile 키워드란? (0) | 2024.10.11 |
[C언어] 구조체, 열거형, 공용체란? (0) | 2024.10.10 |
[C언어] 쉬프트 연산과 비트 연산 (0) | 2024.10.10 |