ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C/C++] #define, 전처리기,
    기초/C,C++ 2017. 3. 8. 10:09

    전처리기

     

    컴파일전 실행되는 코드들

     



    #define

    매크로

    값, 연산자, 문장 등 이름으로 단순히 치환하는 역할을 한다.

    메모리 공간 할당 X

    자료형 관련 X

     

    따라서 전처리기(#define)이 컴파일로 갈때

    컴파일이 binary코드로 만들기전 치환을 끝낸다.

    ex) #define PI 3.14

    printf("%d",PI);

    를 하면 PI값은 컴파일 이전에 3.14로 변경됩니다.

     

    함수나 연산자로도 사용할 수 있습니다.

     

     

     

    그렇다면 조건식으로도 사용할 수 있습니다.

     

    ***but***

    매크로는 그대로 치환해버리기 때문에 연산의 결과값이 원하는 결과값과 다를수 있습니다.

    그렇기 때문에 연산을 할때는 ( )를 묶어줍니다.

     

    [원치 않은 결과값]

     

    ??why??

    매크로로 정의된 함수는 받은 인자값을 그대로 치환합니다.

    따라서

    2+2*2/4 = 3의 결과가 나오게 됩니다.

    +(덧셈)은 *(곱셈)과 /(나눗셈)보다 연산자의 순위가 낮아서 늦게 처리되기에 이런 결과값이 나오게 되는 거예요

     

    [원하는 결과 값]

     

    한줄로 할 수 없을때는 \(백슬래쉬)를 사용합니다.

     

     

     

    [코드 실행 과정]

    소스파일

    전처리기

    임시파일

    컴파일러

    컴파일러로 인해 앞부분을 신경쓰지 않아도 된다

    오브젝트파일

    링크

    실행

     

     

    '기초 > C,C++' 카테고리의 다른 글

    [C/C++] 간단한 예제(복습)  (0) 2017.03.18
    [C/C++] 메모리영역  (0) 2017.03.07
    [C/C++] 구조체  (0) 2017.03.06
    [C/C++] 클래스, 구조체, 함수의 차이점  (0) 2017.03.03
    [C/C++] 반환 형식 ,Call by ~  (0) 2017.03.02

    댓글

Designed by Tistory.