본문 바로가기

컴퓨터

C언어 :: 전처리문의 종류(#include, #define, #ifdef, ... ) 전처리문의 종류(#include, #define, #ifdef, ... ) 전처리문이란? 실질적인 컴파일 이전에 미리 처리되는 문장을 가리킨다. 선행처리기라고도 한다. 따라서 컴파일러는 사용자가 작성한 코드를 컴파일하기 전에 전처리문에서 정의해 놓은 작업들을 먼저 수행한다. 종류로는 #define, #if, #ifdef, #ifndef, #defined, #undef 등이 있다. 이것은 기존에 있는 방대한 소스 코드를 지우지 않고 활성화 비활성화 하는 데에 가장 많이 이용된다. 즉, 기존에 있는 소스 코드를 건드리지 않는 상태에서 부분적인 컴파일을 하는 것이다. C의 전처리문이 오는 줄(Line)의 첫 문자는 항상 '#'으로 시작한다. ANSI 표준에 따른 C의 전처리문의 종류가 아래에 나와 있다. - .. 더보기
[초강추!ㅋㅋ] 구조체 리턴에 관하여 안녕하세요. 구조체를 리턴할 때 어떻게 사용하는게 메모리 효율과 데이터값을 보전하면서 사용해야하는지 모르겠습니다. 기존방법 구조체 인스턴스 변수를 extern으로 선언하여. 함수 호출 시 그대로 데이터 값과 구조체를 사용하여 리턴한다.(리터할필요도 없을듯) ->문제는 extern으로 사용하기때문에 구조체크기가 커질경우 메모리를 아무래도 많이 차지하고, 함수호출시 구조체가 복사되어 느려진다는 단점이 있습니다. ==> extern 키워드를 뭔가 잘못 이해하고 계신게 아닌가 싶습니다. 전역변수를 얘기하신 것 같은데.. extern 키워드는 A라는 파일에 선언된 전역변수를 B라는 파일에서 사용하고 싶을 때 이 변수는 B 파일 외부에 정의된 변수라는 의미로 사용되는 것입니다. 두번째 방법 구조체 주소값을 함수호출.. 더보기
malloc() 작동 원리 http://blackrain.egloos.com/1224982 글 본문에 대한 내 생각을 밝히는 것이 아니기 때문에 트랙백은 남기지 않았다. 다만 글 쓰신 Gony님이 인용하신 '조엘 온 소프트웨어'의 대목에 많은 오류가 있어서 이렇게 글을 적어본다. 물론 좁은 지면과 독자의 배경 지식을 감안해서 쉽고 간단하게 malloc() 동작 원리를 썼으리라 생각한다. 그러나 실제 방식은 이와 많이 다르다. 혹시나 오해를 가질까 해서 이 글을 쓴다. malloc이 어떻게 동작하는지 아십니까? malloc의 본질은 사용 가능한 메모리 블록을 연결 리스트linked list로 길게 연결한 자유 체인(free chain)입니다. malloc은 연결리스트를 따라가며, 요청 받은 메모리 양보다 큰 블록을 찾습니다. 이렇게.. 더보기
[C/C++] malloc, calloc, realloc를 이용한 메모리 할당 malloc와 calloc의 함수 원형은 다음과 같다. void *malloc(size_t size); void *calloc(size_t num, size_t size); malloc는 할당할 메모리 크기를 바이트 단위로 전달받고, 할당된 공간의 값들은 바꾸지 않는다. calloc는 메모리 크기를 두 값으로 나누어 전달받으며, 할당된 공간의 값을 모두 0으로 바꾼다. 그래서 배열을 할당하고 모두 0으로 초기화해야 할 때는 calloc를 쓰면 편하다. 아래 세 문장은 int형 변수를 배열처럼 5개씩 할당하는 예이다. n = (int *)malloc( 5 * sizeof(int) ); n = (int *)calloc( 5, sizeof(int) ); n = (int *)calloc( 1, 5*sizeof(.. 더보기
C언어 :: realloc함수 realloc 동적으로 할당된 메모리를 재할당합니다. Declaration void *realloc( void *memblock, size_t size ) Return value 성공 - 새로운 메모리 영역을 가리키는 포인터 반환 실패 - NULL 포인터 반환 Parameters memblock - NULL 포인터 또는 이전에 할당한 메모리 영역을 가리키는 포인터 size - 새로 할당받을 메모리 크기(단위는 바이트) Detail descriptions realloc()를 번역할 때 "재할당" 또는 "다시 할당"이라고 하는데 많이 어색합니다. 다시 할당하는 것이 아니라 할당된 메모리 영역의 크기를 변경, 대부분은 확장하는 것입니다. 정확하게 이름을 짓는다면 extendalloc()정도가 좋겠습니다. 굳이.. 더보기
[C언어] 배열 - 선언,사용,다차원배열 프로그래밍을 하기 위해서는 먼저 해당 프로그래밍에서 관리해야 할 데이터에 대한 분석과 구현해야 할 기능에 대한 조사가 이루어져야 합니다. 특히 관리해야 할 데이터에 대한 분석을 통해 사용할 타입을 정의를 하고 관리해야 할 자료구조를 선택하게 됩니다. C언어에서는 사용자 정의타입을 정의할 수 있도록 구조체, 공용체, 열거형등의 문법을 제공하고 있으며 자료를 유효 적절하게 관리할 수 있도록 동적 메모리 할당이나 배열과 포인터에 관련된 문법 및 라이브러리를 제공하고 있습니다. 이번 장에서는 동적 메모리 할당을 제외한 나머지 사항에 대해 학습하기로 합시다. 동적 메모리 할당에 대한 내용은 기본적인 문법 사항을 다루고 나서 설명하기로 하겠습니다. 1. 배열 프로그래밍에서 배열이란 동일한 레코드를 연속적인 메모리에.. 더보기
[C언어] 포인터 - 선언, 사용 1. 포인터 1.1 포인터의 선언 포인터는 프로그램 메모리 주소를 가질 수 있는 변수 타입입니다. C언어에서 포인터를 선언할 때에는 원소 타입을 명시하고 포인터 변수를 지시하는 *를 명시하게 됩니다. 포맷: [type] *[변수명]; int *p_exam; /* 정수형 포인터형 번수 p_exam을 선언하였다. */ 여기서 p_exam은 메모리 주소를 갖을 수 있는 포인터 타입으로 해당 메모리 주소에 있는 원소를 int형으로판단하고 사용하겠다는 의미입니다. 실제 p_exam이 가지고 있는 메모리 주소에는 실제 정수형 변수가 있을 수도 있지만 다른 타입의 변수가 있거나 아무런 의미가 없는 주소일 수도 있습니다. p_exam을 적절한 주소를 대입하고 이를 관리하는 것은 모두 개발자의 책임으로 되어있고 이에 개.. 더보기
[C언어] 배열과 포인터 1 다양한 포인터와 배열 int *pa1[10]; /* 포인터 배열 */ int (*pa2)[10]; /* 배열 포인터 */ int **pp; /*다차원 포인터 */ void *vp; /* void 포인터 */ int (*fnCmp)(int ,int) /* 함수 포인터 */ 여기에서는 좀 더 다양한 포인터와 배열에 대해 살펴 보기로 합시다. 실제 사용하는 자세한 예는 동적 메모리 할당이나 프로그래밍 과정 및 프로젝트를 통해 소개될 것이며 여기에서는 기본적인 내용에 대한 소개를 하도록 하겠습니다. 그리고, 실제 여러분들이 주제를 정해 프로젝트를 해 나가는 경험을 통해 정확하게 이해하실 수 있을 것이라 생각됩니다. 여기에서는 이들에 대한 표현의 구분 및 기본적인 문법 사항을 점검하시길 바랍니다. 1.1 포인.. 더보기