본문 바로가기
{Programing}/C.C++

c/c++ enum, preprocesser

by 탱타로케이 2020. 1. 6.

열거형 : 정수형 상수들을 알아보기 쉬운 별칭으로 명명해 묶어두는 방식. 각 요소들은 순서대로 1씩 증가하는 값을 가지게 됨.

초기값 : 일반 변수의 값 초기화 처럼 사용하는 값. 이 값을 기준으로 다음 열거형 값부터 1씩 증가되는 값을 가짐.

enum DayOfWeek {    // 열거형 정의
    Sunday = 0,         // 초깃값 할당
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
};

/*
typedef enum _DayOfWeek {    // 열거형 이름은 _DayOfWeek
    Sunday = 0,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
} DayOfWeek;                 // typedef를 사용하여 열거형 별칭을 DayOfWeek로 정의

DayOfWeek week; //이게 더 간단하니까 이방법쓰는게 더 간단하고 편한거같음.

*/
int main()
{
    enum DayOfWeek week;    // 열거형 변수 선언

    week = Tuesday;    // 열거형 값 할당

    printf("%d\n", week);   
    
    return 0;
}

 

전처리기 지시자

컴파일 전에 실행되는 프로그램에서 처리할 코드

 

Include : 보통 헤더파일을 불러오는데 사용하는 지시자로 해당 파일의 내용을 지시자가 작성된 위치에 복사해놓는 기능.

<>로 작성하면 컴파일러와 함께 제공되거나 설치형 라이브러리로 제공되는 헤더파일을 찾고.

"" 로 작성하면 사용자 - 프로그래머 - 가 작성한 소스파일과 같이 있는 헤더파일,  지정한 경로의 헤더파일을 찾는다.

 

Macro

입력을 출력으로 변환하는 방식을 정의하는 규칙.

#define으로 지시하며, 객체 매크로와 함수 매크로가 있다. 

객체 매크로 : 상수, 문자열 들을 사용하기 위해 쓰며, 이 매크로를 발견하면 해당하는 상수,문자열로 치환한다.

 

함수 매크로 : 인라인 함수와 비슷한 기능을 하며, 이 매크로를 발견하면 해당하는 코드로 치환한다.

 

#undef : define으로 정의된 매크로를 해제함.

 

조건부 컴파일

이 지시자 사이에 있는 코드를 조건에 따라 컴파일 시킬지 말지 결정하는 방식.

 

#define을 이용해 텍스트 없는 객체 매크로를 선언하고,

 

#if ~ #endif 로 조건부 컴파일 할 코드 블럭을 생성하면 된다.

 

#if ~~~ : ~~~가 참이면.

#else : else 기능.

#ifdef ~~~ : 만약 ~~~가 정의 되어있다면.

#ifndef ~~~ : 만약 ~~~가 정의 되지 않았다면. 보통 헤더파일이 겹치는것을 막기 위해 사용함. #ifndef 헤더_H__ 로 사용.

#elif defined : else if 같은 기능.

#endif : 여기까지 블럭임.

 

#ifdef 와 #ifndef는 반대 속성이지만 항상 #endif와 쌍으로 써야한다.

 

#error : 컴파일 중단 에러문. 

 

#line : 소스코드 줄번호 지정. 물리적으로 보이는 줄번호를 강제로 변경함.

 

#pragma : 컴파일 옵션을 지정하기 위함. 지시자 뒤에 붙는 옵션에 따라 기능이 다름.

옵션 

 

once : 해당 헤더파일을 한번만 빌드되게 하는 옵션.

 

comment() : lib 파일을 링크 시키는 옵션. lib, "lib파일경로" 를 입력하면 됨.

 

warning() : 여러 옵션이 있지만 disable : 에러코드번호 를 입력하면 해당 에러를 컴파일에서 잡지 않게 함.

 

pack() : 구조체 정렬 크기를 조정하는 옵션으로, 입력한 값을 기준으로 데이터 저장위치를 조정한다. 

구조체 정렬크기는 CPU bit 수에 비례해서 지정되어있다. 바이트 패딩이라고도 함. 

구조체 정의 전에 pack(push, n) 으로 압축하고. 정의 끝나고 pack(pop)으로 압축을 푼다.

'{Programing} > C.C++' 카테고리의 다른 글

c/c++ 문자열  (0) 2020.01.14
c/c++ 템플릿  (0) 2020.01.13
c/c++ const 예약어  (0) 2020.01.06
c/c++ 배열, 동적할당  (0) 2020.01.06
c/c++ 구조체 / 클래스 (3)  (0) 2020.01.03

댓글