본문 바로가기

CERT C/선언과 초기화

(3)
[CERT C/선언과 초기화] (3) 기억클래스 취약성 의미 기억클래스란 변수의 값이 어떤 종류의 메모리에 저장되는지를 지정하는 것을 의미한다. auto, register, static으로 구성되어있다. auto 변수 함수, 블록 내부에서 사용되고 흔희 local 변수라고 불린다. 기억 클래스가 명시되지 않고 선언된 변수는 모두 자동 변수이다. 스택 공간을 사용하며, 함수나 블록에서 기억 영역이 확보되고, 벗어나면 소거됩니다. ** return 문에서 return 되는 값은 외부에서 기억영역을 호가보하게된다. register 변수 CPU가 연산 시 데이터를 임시로 저장하는데 사용하는 작고 빠른 기억장소이다. 2개까지만 선언 가능하고, 초과된 변수는 AUTO 변수로 지정된다. 레지스터에는 주소가 없으므로 참조가 불가능하다. static 변수 프로그램이 종료될 ..
[CERT C/선언과 초기화] (2) 가변인자 함수 사용 시 주의할 점 의미 가변인자 함수는 인자의 개수가 정해지지 않은 함수를 의미한다. 예를들면 printf, scanf 함수가 가변인자 함수이다. int printf(const char*, ...); int scanf(const char*, ...); 동작 방식 상황에 따라 들어오는 인자의 개수가 다르므로 에 정의 되어있는 함수를 이용해서 다룬다. 1. va_list args 가변 인자 목록, 가변 인자의 메모리 주소를 저장하는 포인터이다. va_list : char *형 args : argument를 가리키는 포인터 2. va_start(args, 마지막 고정인수) 가변 인자를 가져올 수 있도록 포인터를 설정한다. 3. va_arg(args, type) 가변 인자 포인터에서 특정 자료형 크기만큼을 가져온다. 4. va_..
[CERT C/선언과 초기화] (1) 코드의 가독성을 높이기 위해 타입 정의를 사용하라 의미 C 언어 같은 경우, 함수 포인터를 이용한 함수들은 타입을 읽을 때 가독성이 떨어지는 경우가 많다. 아래 signal 함수로 예를 들어본다. void(*signal(int signum, void (*handler)(int)))(int) signal 함수를 반환하는 부분과 매개변수 부분으로 나누어보면 (1) signal 함수는 두 개의 파라미터를 가진다. signal(int signum, void (*handler)(int)) (2) signal 함수가 반환하는 값은 void (*)(int); -> 함수 포인터 형이며 반환 값이 없고 int 매개변수를 받는 함수를 가르리키는 포인터이다. 문제 코드 1. 함수의 선언이 읽기도 어렵고 이해하기 힘들다. #include int (*getFunction(in..