CS/C

20240111 C - Static(정적 변수)과 함수 포인터

싹난 감자 2024. 1. 11. 13:08

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