Language/C++

[C++] 전처리기

마탁이 2020. 12. 13. 17:06

1. 전처리기(Preprocesser)
  - 프로그램을 컴파일 할 때 컴파일 직전에 실행되는 별도의 프로그램.
  - 전처리가 실행되면 각 코드에서 지시자(directives)를 찾는다.
  - 지시자는 #으로 시작해서 줄 바꿈으로 끝나는 코드이다.
  - 전처리기는 컴파일러가 실행되기 직전에 단순히 텍스트를 치환하는 역할을 하기도 하고,
    디버깅에도 도움을 주며 헤더 파일의 중복 포함도 방지해주는 기능을 가진다.

  1) Include
    - #include 를 하면 전처리기는 포함된 파일된 내용을 지시자 위치에 복사한다.
    - <>는 컴파일러와 함께 제공되는 헤더 파일을 include할 때 사용한다.
      * 위 헤더 파일은 C++런타임 라이브러리의 헤더 파일로써 운영체제의 특별한 위치에 존재.
    - "" 는 소스 파일이 있는 디렉토리에서 헤더파일을 include 하도록 전처리기에 지시한다.
      * 일반적으로 이와 같은 방법으로 자신이 작성한 헤더 파일을 include 한다.

  2) Macro
    - #define 지시자를 사용해서 매크로를 만들 수 있다.
     * 매크로는 입력을 출력으로 변환하는 방식을 정의하는 규칙이다.
    - 매크로는 객체와 유사한 매크로(object-like macro)와 함수와 유사한 매크로(function-like macro)가 있다.
    - 함수와 유사한 매크로는 함수처럼 작동한다.
    - 객체와 유사한 매크로는 아래와 같이 두 가지 방법 중 하나로 정의한다.
    - e.g)
       #define identifier
      #define identifier substitution_text

    * 첫 번째 정의에서는 대체 텍스트가 없지만,
      두 번째 정의에서는 대체 텍스트가 있다.
    * 지시자는 명령어가 아니므로 둘 다 세미콜론(;)으로 끝나지 않는다.

    - 대체 텍스트가 있는 객체와 유사한 매크로
    - 전처리기가 이 지시자를 발견하면 identifier는 앞으로 'substitution_text'로 대체된다.
    - 식별자는 일반적으로 공백을 나타내는 밑줄을 사용하며 대문자로 모두 입력한다.
    - 대체 텍스트가 없는 객체와 유사한 매크로
    - 일반적으로 이 전처리 지시자는 조건부 컴파일(conditional compilation)을 하기 위해 사용한다.

  3) 조건부 컴파일
    - 컴파일할 조건이나 컴파일하지 않을 조건을 지정할 수 있다.
    - #ifdef 지시자를 사용하여 전처리기가 이전에 #이 정의되었는지 아닌지를 확인한다.
      정의되었다면 #ifdef와 해당 #endif 사이의 코드가 컴파일 된다.
      그렇지 않으면 코드가 무시된다.

'Language > C++' 카테고리의 다른 글

[C++] 컴파일 과정  (0) 2020.12.15
[C++] 컴파일 / 런타임 / 논리 오류  (0) 2020.12.15
[C++] 입출력 속도  (0) 2020.12.13
[C++] 얕은 복사와 깊은 복사  (0) 2020.12.13
[C++] 스마트 포인터  (0) 2020.12.13