I. #define

  • 전체 파일에서 일련의 텍스트를 다른 텍스트로 대치하는 매크로
  1. #include<iostream>
  2. using namespace std;
  3. #define ABS(a) ((a)<0 ? -(a) : (a))
  4. int main()
  5. {
  6. cout<<"ABS of -1 and 1 : "<<ABS(-1)<<' '<<ABS(1);

  7. return 0;

  8. }
  • 위와 같은 소스가 있을 경우 ABS대신에 컴파일시에 ((a)<0 ? -(a) : (a))로 대치되어서 계산이 된다.

II. #error

  •  컴파일러가 이 지시자를 만나면 컴파일을 중단하도록 한다. 이 지시자는 우선 디버깅을 위해 사용한다.

#error message

  • #error가 발생하면 message와 문장 번호가 디스플레이 된다.
  1. #include <stdio.h>
  2. int main(void) {
        int i;
        i = 10;
  3. #error this is an error message
        printf("%d", i);  //이 줄은 컴파일되지 않는다.
  4.     return 0;
    }

III. #if, ifdef,#ifndef,#else,#elif,#endif

  • 기본 형태

    • #if 상수표현식
    • #ifdef 매크로이름
    • #ifndef 매크로이름
    • #else ,#elif : 이것 들은 if else elseif 문과 같은 형태이다.
    • #nedif : #if,#ifdef,#ifndef 같은 것들을 끝낼때 쓴다.
  • 기본 예시 (http://yatoyato.tistory.com/815 참고 하였습니다.)

    1. #define NUM 2 #if NUM == 1
          printf("Num is 1");
      #elif NUM == 2
          printf("NUM is 2");
      #elif NUM == 3
          printf("NUM is 3");
      #elif NUM == 4
          printf("NUM is 4");
      #endif

     

    1. #include <stdio.h>
    2. #define CHAR_SET 256
    3. int main(void) {
          int i;
    4. #if CHAR_SET == 256
          printf("Displaying full ASCII character set plus extensions.\n");
      #else
          printf("Displaying only ASCII character set.\n");
      #endif
    5.     printf("\n"); 
          for(i=0; i<CHAR_SET; i++)
              printf("%c", i);
    6.     return 0;
    7. }
  • #ifndef와 #define과 #endif는 대부분 헤더 파일에서 볼수 있다.

IV. #include

  •  컴파일러에서 다른 소스 파일을 읽고 컴파일하도록 한다.
  • 기본 형태

    • #include<filename>

      • <>로 되어있다면 기본 디렉토리(include폴더에 있는 것을 가져다가 쓴다.>
    • #include "filename"

      • ""로 되어있다면 현재의 작업 디렉토리에 있는 파일을 불러서 쓴다.
  • 주로 filename 보다는 헤더파일이다.

V. #line

  •  #line은 미리 정의된 식별자인 _LINE_과 _FILE_의 내용을 수정하기 위해 사용.
  • 기본 형태

    • #line number filename

VI. #pragma

  • 다양한 명령을 컴파일러에 제공하기 위해 사용

VII. #undef

  • 이전에 정의한 매크로 이름을 삭제한다.
  • 기본 형태

    • #undef 매크로 이름
  1. #include <stdio.h>
  2. #define DOG
  3. int main(void) {
    #ifdef DOG
        printf("DOG is defined");
    #endif
  4. #undef DOG
  5. #ifdef DOG
        printf("This line is not compiled");
    #endif
  6.     return 0;
    }
  • 위와 같은 소스 일때 undef 만나기 전까지는 DOG는 정의 되어 있는 상태이다.

VIII.#와 ##프리프로세서 연산자

별로 필요 없는 것이므로 건너뜹니다.

VIIII.미리 정의된 매크로 이름들

  • _LINE_ 

  • _FILE_
  • _DATE_
  • _TIME_
  • _cplusplus_
  1. 예를 들어 다음 프로그램은 __LINE__을 100, __FILE__을 myprog.c로 변경한다.
  2. #include <stdio.h>
  3. int main(void) {
    #line 100 "myprog.c"
        printf("Compiling %s, line: %d, on %s, at %s", __FILE__, __LINE__, __DATE__, __TIME__);
  4.     return 0;
    }
  5. 이 프로그램이 July 3, 1995, 10 A.M.에 컴파일되었다고 가정하면, 이 프로그램은 다음과 같이 출력한다.
  6. Compiling myprog.c, line: 101, on Jul 3 1995, at 10:00:00

이 글은 스프링노트에서 작성되었습니다.

Posted by kid1412
,