static
#include <stdio.h>
int g_cnt = 0;
void StaticFunc() {
int cnt = 0;
printf("cnt: %d ", ++cnt);
printf("g_cnt: %d ", ++g_cnt);
// 정적변수(Static Variables)
// 컴파일할 때 메모리에 올라감 static class도 객체를 만들기 전에 이미 메모리에 있기 때문에 접근이 가능하다
// 전역변수와 같이 프로그램이 종료될 때까지 유지되기 때문에 사용에 유의
static int s_cnt = 0; // 값은 유지되지만 지역 안에서만 접근이 가능하다
printf("s_cnt: %d\n", ++s_cnt);
}
int main() {
for (int i = 0; i < 10; ++i) {
StaticFunc();
}
return 0;
}
함수 포인터
#include <stdio.h>
void PrintHello() {
printf("Hello\n");
}
void PrintWorld() {
printf("World\n");
};
void (*pFunc)(); // 함수 포인터의 원형
int main() {
// 함수 포인터(Function Pointer)
// Function Call Overhead 함수 호출 비용
pFunc = PrintHello; // 함수 포인터에 함수의 주소를 저장. 함수와 함수 포인터의 반환형, 매개변수 타입과 개수를 맞춰줘야함
(*pFunc)();
pFunc = PrintWorld; // 함수의 이름은 그 함수의 주소를 담고 있음
(*pFunc)();
// 게임의 키 변경을 할 때 함수 포인터가 쓰이는거다 추상화 클래스 쓸 때
//inline Funciton 함수를 별개의 지역으로 만들지 않고 메인 코드에 때려박아달라고 요청. 함수를 inline으로 만들면 호출 비용을 줄인다 속도 상승, 하지만 너무 길면 과부화, 컴퓨터가 알아서 컷할수있음
return 0;
}
'CS > C' 카테고리의 다른 글
20240112 C - 자료구조 QUEUE (0) | 2024.01.12 |
---|---|
20240112 C - 자료구조 STACK (0) | 2024.01.12 |
20240111 C - Bitwise(비트단위 연산) (0) | 2024.01.11 |
20240111 C - Union(공용체) (0) | 2024.01.11 |
20240111 C - Enum(열거체) (1) | 2024.01.11 |