일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- compile time constants
- 홍정모님
- const
- 본즈앤올
- regression problem
- coursera
- 기계학습 기초
- 형변환
- classification problem
- 단항연산자
- 나동빈님
- 연산자
- sizeof()
- Machine Learning
- 이코테
- C++
- standford University
- 기계학습
- algorithm
- 코드블럭 오류
- 학습 알고리즘
- decimal
- Andrew Ng
- #define
- 코딩테스트
- Runtime constants
- 프로그래밍
- Greedy
- #endif
- CLion
- Today
- Total
wellcome_공부일기
01.10. C++| 전처리기(Preprocessor)란? 본문
<목차>
1. 전처리기(Preprocessor)란?
2. 대표적인 전처리기(Preprocessor) 알아보기
- The #define Preprocessor
- Function-Like Macros
- Conditional Compilation
전처리기(Preprocessor)란?
- 전처리기(Preprocessor)는 실제 컴파일이 시작되기 전에 컴파일러에게 정보를 사전 처리하도록 지시하는 지시사항이다.
- 모든 전처리기 지시문(Preprocessor Directives)은 #로 시작하며, 전처리기 지시문 앞에 공백 문자만 나타날 수 있다.
- 전처리기 지시문은 C++ 문장이 아니므로 세미콜론(;)으로 끝나지 않는다.
- 이미 모든 예에서 #include 명령을 보았듯이, 이 매크로는 헤더 파일을 소스 파일에 포함시키는 데 사용된다.
- #include, #define, #if, #else, #line 등과 같이 C++가 지원하는 전처리기 지시문의 수가 있다.
-www.tutorialspoint.com/cplusplus/
대표적인 전처리기(Preprocessor) 알아보기
- The #define Preprocessor
#define 전처리기 지시문은 상징 상수를 만든다. 상징 상수는 매크로라고 하며 지시의 일반적인 형태는 아래와 같다.
#define macro-name replacement-text
이 줄이 파일에 나타나면 프로그램이 컴파일되기 전에 해당 파일에서 매크로의 모든 후속 발생이 대체 텍스트로 대체된다.
#include <iostream>
#define MY_NUMBER1 9
#define MY_NUMBER2 "hello"
int main()
{
using namespace std;
cout << MY_NUMBER1 << endl;
cout << MY_NUMBER2 << endl;
return 0;
}
- 매크로는 대부분 대문자로 사용한다.
- 매크로는 스트링도 가능하다.
- MY_NUMBER1와 MY_NUMBER2를 각각 9와 "hello"로 교체해준다고 생각하면 된다.
- Function-Like Macros
#define을 사용하여 다음과 같이 인수를 취할 매크로를 정의할 수 있다.
#include <iostream>
#define MAX(a,b) ((a>b) ? a:b)
int main()
{
using namespace std;
cout << MAX(2,3) << endl;
return 0;
}
하지만, 복잡한 연산식 혹은 어떤 숫자가 나올지 모르기 때문에 이를 대비하여 괄호' () '를 이용해서 매크로를 확실히 구분할 수 있도록 한다.
#include <iostream>
#define MAX(a,b) (((a)>(b)) ? (a):(b))
int main()
{
using namespace std;
cout << MAX(1 + 4,3) << endl;
return 0;
}
#include <iostream>
#define MIN(a,b) (((a)<(b)) ? a : b)
int main ()
{
using namespace std;
int i, j;
i = 100;
j = 30;
cout <<"The minimum is " << MIN(i, j) << endl;
return 0;
}
사실, math 헤더파일을 이용하면 MAX 매크로를 사용하지 않아도 된다.
컴파일러마다 지원하는 헤더파일이 다른데 CLion은 현재 math.h 와 algorithm으로 맥스를 사용할 수 있다.
#include <iostream>
#include <math.h> //standard library
#define MAX(a,b) (((a)>(b)) ? (a):(b))
int main()
{
using namespace std;
cout << std::max(1+3,2) << endl;
return 0;
}
- Conditional Compilation
프로그램 소스 코드의 선택적 부분을 컴파일하는 데 사용할 수 있는 몇 가지 지침이 있다. 이 과정을 조건부 편찬이라고 한다.
조건부 전처리기 구조는 'if' 선택 구조와 매우 유사하다.
#include <iostream>
#define LIKE_APPLE
int main()
{
using namespace std;
#ifdef LIKE_APPLE
cout << "APPLE" << endl; //output : APPLE
#else
cout << "Orange" << endl;
#endif;
return 0;
}
- #define이 매크로 네임을 뒤의 텍스트로 교체해주는 것은 맞지만 매크로만 존재할 경우 교체를 하지 않는다.
- 또한 #define은 선언한 해당 파일 내에서만 유효 효력이 있어, 효력범위에 신경써서 프로그래밍을 해야 한다.
- Conditional Compilation은 빌드하기 전에 매크로를 이용한 조건에 따라 컴파일이 다른 방식으로 하는 시작을 말한다.
- 전처리기의 정의처럼 위의 #ifdef, #else, #endif 블락 내용이 이미 결정된 상태에서 컴파일이 시작된다고 생각하면 된다.
(예를 들어, 빌드 하기 전에 컴퓨터가 윈도우인지 리눅스인지 알고 시작하는 것처럼)
*해당 내용은 홍정모님의 따라 배우는 C++을 공부한 것을 토대로 작성되었습니다.
*-www.tutorialspoint.com/cplusplus/의 내용을 참고하여 작성하였습니다.
'프로그래밍 > C++' 카테고리의 다른 글
02.01. C++ | 기본 자료형(Primitive Built-in Types)과 + α (0) | 2020.05.02 |
---|---|
01.11. C++ | 변수 초기화 3가지 방법과 차이 (0) | 2020.04.30 |
01.09. C++ | std :: 명칭공간(Name Space)이란? (0) | 2020.04.28 |
01.08. C++ | 프로그래밍에서 지켜야 할 기본적 서식(Formatting) (0) | 2020.04.25 |
01.07. C++ | 피연산자(Operand) 갯수에 따른 연산자(Operator)의 3가지 종류 (0) | 2020.04.24 |