[C, C++] 함수포인터와 콜백함수

이 글은 포인터의 개념을 알고 있다는 가정 하에 작성되었습니다. 서론 함수포인터는 입사 후 외부업체의 API를 사용하면서 처음 접했다. 함수포인터를 학습하다 보니 콜백함수가 등장했고, 콜백함수를 학습하다 보니 API에 함수포인터가 왜 사용되는지 알게 되었다. 알고 보니 API에 흔하게 사용되었다. 함수포인터 포인터는 변수의 주소값을 가진다. 그리고 함수포인터는 함수의 주소값을 가진다. 주체만 다를 뿐이지 주소를 저장한다는 포인터의 본래 목적은 … Read more

[C, C++] int const, const int, int const *, int * const

const(상수) 변수와 달리 const는 한번 만들어진 자료를 수정할 수 없게 상수로 만든다. C, C++외 다른 언어에서는 const외 readonly, final과 같은 유사한것들도 있다. int const, const int const는 위치가 가변적이며 int const는 const int와 같다. 편하게 int를 썼을 뿐 특정 자료형과 관련이 있지는 않다. char const, const char도 마찬가지다. int const *, int * const 포인터 … Read more

[C, C++] 시간측정 함수 clock

clock 함수 프로그램이 실행되면 0부터 1ms당 1씩 clock이 계속 증가하고 있으며, clock()을 호출할 때 현재 clock(현재까지 증가된 clock)을 얻어올 수 있다. 즉 clock()으로 호출된 결과는 호출된 시점에서의 프로그램 실행시간이다. 이를 이용해서 특정 구간 시작과 끝 clock의 차이를 얻어오면 그 구간의 실행시간을 측정할 수 있다. RTOS/임베디드 시스템에서의 clock 함수 RTOS에서는 clock 함수 사용시 주의가 필요하다. 하드웨어와 … Read more

[C, C++] #ifdef, #if defined() 활용

소프트웨어가 업데이트될 때, 당장 사용하지 않지만 언제 재사용될지 몰라서 남겨둬야 하는 코드들이 있거나, 하나의 소스코드를 국가마다 언어를 다르게 하고싶다거나 할때 이런 경우 #if, #if defined와 같은 전처리기가 유용하게 활용된다. 클린코드인가 어디선가 사용하지 않는 코드나 주석은 남기지 말고 지우라지만 안쓰기가 쉽지않다. 그런데 확실히 ifdef가 많으면 코드가 지저분해지는건 어쩔수가 없다. #ifdef #ifdef는 #define으로 정의된 매크로와 함께 쓰이는데, … Read more

[C, C++] 전역변수와 정적변수가 0으로 초기화되는 이유

전역변수(global), 정적변수(static), 지역변수(local) 초기화를 하지 않은 전역변수, 정적변수, 지역변수를 선언하고 출력해보았다. 위 코드를 실행하면 아래와 같은 출력을 얻는다. 따로 초기화를 하지 않았지만 전역변수(global)와 정적변수(static)는 자동으로 0으로 초기화되었고 지역변수(local)는 초기화를 하지 않아서 쓰레기 값이 들어갔다. 이는 변수의 저장 위치가 다르기 때문에 발생하는 결과다. Data, BSS, Stack 지역변수는 메모리의 Stack Segment에 저장되며 선언된 함수가 종료되면 메모리에서 사라진다. … Read more

[C++, STL] 벡터와 배열의 최대값, 최소값 출력

다른 글 [C++, STL] 알고리즘 문제풀이를 위한 벡터(vector) 벡터와 배열의 최대값, 최소값 max_element(), min_element()는 자료구조에서 [forward, last) 범위 내 최대값, 최소값을 리턴한다. 이를 활용해서 벡터, 배열의 최대값과 최소값을 출력할 수 있다. 구현 헤더파일 max_element()와 min_element()는 algorithm 헤더파일을 필요로한다. 벡터의 최대값, 최소값 출력 벡터의 begin(), end()를 forward iterator, last iterator로 입력한다면 벡터의 최대값, 최소값을 출력할 수 … Read more

[C++, STL] 우선순위 큐(priority queue) 비교연산자 구현

사용자 정의 우선순위 큐 [C++, STL] 알고리즘 문제풀이를 위한 우선순위 큐(priority queue) 우선순위 큐는 비교연산자를 통해 자료의 우선순위를 정할 수 있다. 그리고 STL에는 자료를 오름차순, 내림차순으로 정렬해주는 greater, less가 미리 구현되어 있어서 편리하게 이용할 수 있다. 그러나 greater, less가 만족스럽지 않다면 사용자가 직접 비교연산자를 구현할 수 있다. 우선순위 큐 선언 우선순위 큐를 사용하기 위해서 queue … Read more

[C, C++] INT, SHORT 등 정수의 최대값, 최소값 출력(limits.h)

최대값, 최소값 확인의 필요성 우리 가족이 대대손손 월급을 받을때마다 급여를 int형 변수인 account에 넣어준다고 하자. 그럼 이 account는 언젠가 2147483647(=INT의 최대값)을 초과할 것이고, 오버플로우가 발생한다. 이를 막으려면 오버플로우가 발생시 account2를 만드는 등의 다른 방법을 취해야한다. 그러기 위해서는 일단 오버플로우의 조건인 INT의 최대값을 알아야한다. 최대값, 최소값 확인 limits.h 파일에는 char, int, short등의 최대값과 최소값이 정의되어있다. printf를 … Read more

[C++] typeid로 정수, 클래스, STL 등 변수의 자료형 확인

목적 C++에서 typeid를 이용하여 정수 등 변수의 자료형을 출력한다. typeid C++에는 typeinfo 헤더파일에 typeid가 있다. typeid와 연산자로 두 개체의 자료형이 같은지 확인할 수 있고 멤버함수 name()을 통해 단일 개체의 자료형을 확인할 수 있다. typeid를 이용하여 두 개체의 자료형 일치 확인 구현 typeid가 포함된 typeinfo, 출력을 위한 iostream를 포함시킨다. 자료형 일치를 확인하고 싶은 개체들을 선언한다. typeid와 … Read more