-
[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