C언어 전처리기에는 #include
와 #define
이 있습니다. #include
는 <stdio.h>
및 <string.h>
등의 헤더 파일을 불러올 때 사용합니다. #define
은 상수값을 문자로 치환할 때 사용합니다.
C언어 전처리기
전처리기(Preprocessor)는 컴파일(코드를 기계어로 번역)의 한 과정으로 본문이 컴파일 되기 전에 실행되는 컴파일입니다.
#
문자로 시작되며 세미콜론을 작성하지 않습니다. 전처리기의 대표적인 종류에는 #include
및 #define
이 있습니다.
#include
#include
전처리기는 원하는 헤더 파일을 해당 파일에 포함(include)시킬 때 사용합니다.
예를 들어 #include <stido.h>
전처리기는 printf()
, scanf()
, puts()
, gets()
등의 라이브러리 함수 파일을 포함시킵니다.
#include <stdio.h>
void main()
{
printf("Hello World!"); //헤더파일에 <stdio.h>가 있어야 printf () 함수 사용 가능
}
#include <string.h>
전처리기는 strcpy()
, strlen()
등의 문자열 처리 함수 파일을 포함시킵니다.
#include <stdio.h>
#include <string.h>
int main()
{
char x[30] = "vnlsdfjksdfljsdklf";
int y;
y = strlen(x); // strlen() 함수는 <string.h>가 있어야 작동
printf("문자열 x의 문자 개수는 %d 입니다.", y);
}
#define 매크로 상수
#define
은 상수(숫자, 기호, 문자열 등)나 심지어 함수까지 특정 문자로 치환할 수 있는 기능입니다.
#define 대체할문자 대체될상수
예를 들어 printf()
함수를 YA
라는 단어로 바꾸면 앞으로는 YA
를 사용해도 똑같은 기능이 발현됩니다.
#include <stdio.h>
#define YA printf
void main()
{
YA("printf가 YA로 치환되었습니다.");
}
숫자를 예로 든다면, 자신이 작성하는 코드에서 숫자 100
이 자주 사용된다면, 숫자 100
을 특정 문자로 지정할 수 있습니다.
#include <stdio.h>
#define Hundred 100
int main()
{
int x = 300;
printf("%d \n", x + Hundred);
printf("%d \n", x - Hundred);
printf("%d \n", x * Hundred);
printf("%d \n", x / Hundred);
}
이럴 경우 단순히 상수 100
을 적는 것 보다 가독성이 증가합니다. 가장 중요한 점은 문자를 자유롭게 바꿀 수 있다는 점입니다.
#define Hundred 100
과 그냥 변수로 int Hundered = 100;
의 지정이 어떤 차이가 있는지 의문이 들 수 있습니다.
이것은 상수와 변수의 차이가 무엇이냐는 질문과 동일합니다.
#define Hundred 100
에서 Hundred
는 상수이므로 Hundred = 200;
과 같은 새로운 변수값을 삽입할 수 없습니다.
하지만 int Hundred 100;
에서 Hundred
는 변수이므로 Hundred = 200;
과 같은 새로운 변수값을 계속 삽입할 수 있습니다.
즉 #define
과 같은 상수값의 설정은 해당 값이 바뀌면 안되는 시점에 사용하는 목적이라 볼 수 있습니다.
문자열도 상수값으로 지정할 수 있습니다.
#include <stdio.h>
#define RESEARCH "함수 계산의 결과를 절삭해서 출력합니다. \n"
void main()
{
printf(RESEARCH);
printf(RESEARCH);
printf(RESEARCH);
}
결과
함수 계산의 결과를 절삭해서 출력합니다.
함수 계산의 결과를 절삭해서 출력합니다.
함수 계산의 결과를 절삭해서 출력합니다.
상수명은 대문자로 작성합니다.