All 215

중복 정의 피하는 방법 (#ifndef와 #define을 이용하여)

헤더 파일간의 관계가 얽히면 중복 정의가 될 수 있다. 이 문제는 매크로 파트에서 배운 조건부 컴파일을 이용해서 해결가능하다. #ifndef를 이용하면 최초 한 번 씩만 정의하는게 가능하다. 예) 구조체의 중복 정의 없애기 header.h #ifndef __HEADER_H__ // 정의 되어 있지 않다면 (이미 정의되었으면 #endif 까지 코드 전부 무시) #define __HEADER_H__ // 정의한다 typedef struct cir { int r; int pi; }CIR; #endif header2.h #ifndef __HEADER2_H__ #define __HEADER2_H__ #include "header.h" CIR CirArea(int num1, int num2) { CIR cir1; ..

카테고리 없음 2019.05.09

#define (매크로 함수)

1. 매크로 함수를 알아보기 먼저, 선행처리기란? 컴파일 이전의 처리를 말한다. (단순 치환 작업) #include도 선행처리 명령문 중 하나이다. Source -> 선행처리기 -> 컴파일러 -> 링커 -> exe 2. 매크로 함수의 특징 1) 매크로 함수의 장점 - 일반 함수에 비해 빠른 실행속도 (단순 치환이므로) - 자료형에 따라 별도로 함수를 정의하지 않아도 된다. 2) 매크로 함수의 단점 - 정의하기가 까다롭다. - 디버깅이 어렵다. 3) 매크로 함수로 정의하면 좋은 함수는? - 작은 크기의 함수 - 호출 빈도가높은 함수 3. #define 상수, 함수 등 거의 모든 것을 매크로 몸체에 넣어 매크로로 정의 할 수 있다. #define YEAR 2013 // YEAR를 2013로 전부 치환 #de..

카테고리 없음 2019.05.08

enum (열거형)

열거형이란? 구조체, 공용체의 경우 멤버에 저장할 값의 타입을 미리 결정한다. 하지만 열거형은 저장이 가능한 값 을 정수의 형태로 결정한다. (열거형은 산술연산자를 사용할 수 없다.) enum test { Do = 1, Re = 2 // Do는 정수 1을, Re는 정수 2를 의미하는 상수로 정의한다 } Test; enum color { RED, BLUE, GREEN // 상수의 값이 선언되있지 않은 경우에는 0부터 1씩 증가하는 형태로 결정한다 }; enum color { RED = 4, BLUE, GREEN 9 // 중간값이 선언이 안 된 경우에는 이전 값보다 1이 증가된 값이 할당된다 (BLUE = 5) } 활용 예 여러개의 연관있는 단어를 상수로 선언해서(직급, 음계 등) 프로그램의 가독성을 높힌다..

카테고리 없음 2019.05.08

union (공용체)

union (공용체) 가장 크기가 큰 변수의 메모리 하나만 공동으로 사용 나중의 것으로 덮어씌워진다. 예시 1) void main() { union player { int a; int b; double c; // 가장 크기가 큰 자료형 double의 8바이트를 공용체 메모리로 사용 } park; park.a = 123456789; park.b = 444; printf("%d \n",park.a); // a(4바이트)가 b(4바이트)로 덮어씌워지므로 444출력 park.c = 3.14; printf("%d \n",park.a); //정수 a에 실수(3.14)가 덮어씌워져서 park.a는 알수 없는 값 출력 printf("%.2lf \n",park.c); // 3.14 출력 } 예시 2) 정수를 입력받아 상..

카테고리 없음 2019.05.08

const

const 값을 고정 시키고 변경이 불가능하게 만든다. (상수화) 변경이 불가능하기 때문에 선언과 동시에 초기화를 해야한다. * 상수의 이름은 대문자로 표시. 띄어쓰기는 언더바로 표시하는게 관례이다. 1. const가 맨 앞부분에 선언 포인터변수가 가리키는 변수의 값 변경 불가 int a = 20; const int* ptr = &a; *ptr = 30; // 에러 a = 40; // 성공 2. const가 포인터 변수의 이름 앞에 선언 포인터변수가 가리키는 변수 변경 불가 int a1 = 20; int a2 = 30; int* const ptr = &a1; // 포인터 변수 ptr이 상수가 됨 ptr = &a2; // 에러 *ptr = 40; // 성공 3. 둘 다 const int * const pt..

카테고리 없음 2019.05.08

static (지역변수 보존, 클래스 변수)

1. static 지역 변수 - 한 번만 초기화 되고, 함수를 나가도 소멸되지 않음 2. static 전역 변수 - 선언된 파일 내에서만 참조가 가능 3. static 멤버 변수 (클래스 변수) - 객체 없이 호출 가능한 변수 4. static 멤버 함수 - 객체 없이 호출 가능한 함수 - static 멤버 함수의 멤버로는 static 변수/함수만 올 수 있다. 4. const static 멤버 - 클래스 내에 선언된 const 멤버의 초기화는 생성자를 통해서만 가능하다. - 그러나 const static으로 선언되는 멤버는 선언과 동시에 초기화가 가능하다 class CountryArea { public: const static int RUSSIA = 1707640; const static int CAN..

카테고리 없음 2019.05.08

fread, fwrite (바이너리 데이터 입출력)

1. 바이너리 데이터 읽기 size_t fread(void* buffer, size_t size, size_t count, FILE* stream); // buffer : 읽어 온 데이터를 담을 버퍼 // size : 버퍼 요소 하나의 크기 (char형 배열이면 1바이트) // count : 한번에 읽을 버퍼의 사이즈 (배열 사이즈) // stream : 읽어 올 파일 or 스트림 2번째 인자와 3번째 인자의 곱의 바이트 크기만큼 데이터를 읽는다. 읽어들인 데이터의 갯수를 반환한다 (파일의 끝에 도달하거나 오류 발생시, 3번째 인자보다 작은 값이 반환된다) 2. 바이너리 데이터 쓰기 size_t fwrite(void* buffer, size_t size, size_t count, FILE* stream)..

카테고리 없음 2019.05.08