Programming/C, C++ 6

[C/C++]함수 포인터

1 함수포인터의 사용 1.1 함수포인터란 요즘 C 하는 개발자를 찾기가 힘들던가요 ? 여기 저기 C언어 개발자를 소개시켜 달라는데, 사람이 없어서 난리입니다. C언어 하면 떠오르는게 포인터죠. 데이터의 위치를 가리키는 데이터 타입라고 생각하면 간단한 개념이긴 한데, 개념이 단순할 뿐 잘 다루기는 쉽지 않습니다. 커널이 관리하는 메모리를 낮은 수준에서 직접 건드리기 때문입니다. 툭하면 다른 프로세스의 메모리 영역을 침범해서 프로그램이 뻗어 버리고, 좀 잘 돌아간다 싶으면 메모리를 해제하지 않아서 모든 메모리를 다 써버리는 문제가 발생합니다. 전혀 추상화 되 있지 않다는 얘기죠. 그러니 사람이 직접 추상화 해줘야 합니다. 예컨데 할당한 메모리를 초과하지 않게 하거나, 메모리 해제를 관리하는 코드를 추가하거나..

Programming/C, C++ 2013.04.18

[C/C++]전처리기 Pre-Processor

컴파일을 시도할 경우 컴파일이 실행되기 전에 전처리기 명령부터 처리된다.전처리기는 # 로 시작하고 ; 를 붙이지 않으며 보이지 않게 소스 코드를 변경하며컴파일러에게 지시를 내릴 수도 있다. 각각은 여기서는 명령어라는 용어를 사용했지만 정확하게는 directive(지시자) 라고 하는 것이 나을 지 모르겠다. #include 가장 흔히 볼 수 있는 전처리기이다. 해당 파일을 찾아서 컴파일러가 그 파일이 마치 현재 컴파일하는 소스 코드에 포함되어 있는 것같이 해준다. 는 표준 헤더 파일일 경우에 설정되어 있는 폴더에서 헤더 파일을 찾으며 “” 는 그 외 폴더에서 찾을 수 있는데 최우선으로 현재 프로젝트 폴더에서 찾게 된다. #define define 문은 여러 경우에 사용될 수 있는데 일반적으로 문자열 대치에..

Programming/C, C++ 2013.04.18

[C/C++]연결 큐(Linked Queue)

큐는 자료구조에서 없어서는 안 된다. 큐는 FIFO(First In First Out), 선입선출 구조를 가진 자료구조로 여러군데서 이용이 가능하다. 기수 정렬에서도 사용되고 프로세스 스케줄링과 같은 곳에서도 사용이 된다. 그리고 기타 여러 선입선출 방식을 취할 때 사용된다. 이 코드는 링크를 이용한 큐이다. 1. LinkedQueue.h #include //큐 노드 typedef struct QueueNode{ int item; struct QueueNode *link; } QueueNode; //큐 타입 typedef struct{ QueueNode *front, *rear; } QueueType; //에러 처리 함수 void error(char *message) { fprintf(stderr, "%..

Programming/C, C++ 2012.10.14

[C/C++]최대 히프, 최소 히프

알고리즘을 배우면서 히프라는 것을 많이 보고 쓰게된다. 정렬이라던지 허프만이라던지 기타등등...그래서 여기 최대히프와 최소히프를 올린다. 나도 참고하고 쓰실 분들도 참고하기 바란다. 1. HeapDefine.h 최대 사이즈가 100으로 잡혀있다. 사이즈를 늘리고 싶으면 Define 헤더에서 늘려서 쓰도록하자. #define MAX_ELEMENT 100 //히프 만들 때, 사용하는 히프노드 typedef struct { int heap[MAX_ELEMENT]; int heap_size; } HeapType; 2. MaximamHeap.h #include "HeapDefine.h" //초기화 함수 void initMaxHeap(HeapType *h) { h->heap_size = 0; } //삽입 함수 vo..

Programming/C, C++ 2012.10.14

[C/C++]C를 이용한 이진탐색트리 라이브러리

과제로 이진탐색트리를 구현하였다. 이진탐색트리를 다음에 이용할 때는 이 라이브러리를 이용하여 구현한다면 다음부터 이진탐색트리의 구현이 매우 편리해질 것같다. 1. BSTError.h 이진탐색트리에서 발생하는 에러 중에 필자가 직접 확인한 에러들에 관한 에러코드들을 규정했다. //에러 코드 #define BST_OK 0x00000000 #define BST_MALLOC_FAIL 0xff000001 #define BST_KEY_ALREADY_EXIST 0xff000002 #define BST_KEY_NOT_EXIST 0xff000003 #define BST_NODE_IS_NULL 0xff000004 2. BST.h 이진탐색트리에 관한 소스이다. 이진탐색트리의 노드와 삽입, 삭제, 순회에 관한 코드들이 구현되..

Programming/C, C++ 2012.09.26

[C/C++]MySQL을 C로 연동하는 소스

MySQL을 C로 연동해 보았다. 예전에 진자게 해본 것이지만 이번 기회에 라이브러리 처럼 정리해서 계속 사용하기 위해서 다시 한 번 만들어 봤다. 간단한 함수 몇개를 만들고 각 사항에 대한 에러코드를 만들었다. 1. dbError.h 각 에러들이 기술되어있는 헤더파일이다. 이런 식으로 에러를 기술해 놓으면 어느 부분에서 에러가 났는지 찾기가 쉬워진다. #define MB_RES unsigned int #define MB_OK 0x00000000 #define DB_INIT_ERROR 0xff000000 #define DB_CONNECTION_ERROR 0xff000001 #define DB_QUERY_EXECUTION_ERROR 0xff000002 #define DB_FETCH_FAIL 0xff0000..

Programming/C, C++ 2012.08.05