티스토리 뷰
전처리기
-전처리기란 컴파일러가 소스 파일을 컴파일 하기 전에 사용자가 지시한 작업을 먼저 처리하는 것 이다.
전처리기의 특징
-C 언어는 전처리기를 사용하여 그 능력과 표기법을 확장한다.
-#으로 시작하는 행을 전처리 지시자라고함ex) #include.. #define.. #if..등
-전통적인 C에서는 첫 번째 열에 #이 와야 한다.
-전처리기는 C를 알지 못한다.
-세미콜론; 이 없다.
-파일 처리를 위한 전처리기 문 : #include
-형태 정의를 위하 전처리기 문 : #define, #undef
-조건 처리를 위한 전처리기 문 : #if, #ifdef, #else, #elif, #edif
-컴파일 옵션 처리를 위한 전처리기 문: #pragma
#include <파일이름> | 미리 정의된 include 폴더에서 파일을 찾는다. |
#include "파일이름" | 현재의 소스 코드가 저장되어 있는 폴더에서 먼저 찾고, 파일이 없다면 미리 정의된 include 폴더에서 파일을 찾는다. |
#error | 컴파일러 오류 메시지를 발생 |
#import | 파일을 추가한다. |
#elif | Else if |
#else | Else |
#ifndef | 식별자가 정의되어 있지 않으면 참 |
#ifdef | 식별자가 정의되어 있으면 참 |
#endif | #findef나 #ifdef, #else에 대한 전처리기 부분을 종료 |
#line
| 내부 행 넘버를 변경한다. |
#undef | 식별자를 정의하지 않는다. |
#progma | 링크할 때 헤더 파일이 한 번만 포함되게 한다 |
#include
-파일 포함하기 이다.
-서로 다른 함수의 함수나 기타를 활용하기 위해 함수형이나 변수형이나 선언 내용을 다른 파일 끼리 연결하는 방식이 필요하다. 이때 #include을 사용한다.
-#include에 명시되는 파일의 내용은 제한이 없다.
-전처리기에 의해 다시 확장되어야 하는 또 다른 전처리 지시자를 포함할 수 있다.
예)
#include <stdio.h>
int main(void)
{
printf("Hello, world!\n");
return 0;
}
printf함수가 stdio.h 파일에 정의되어 있다. 따라서 printf함수의 모양을 알 수 있다. 만약 함수의 모양을 모른다면 호출이 불가능해진다.
#define
-#define은 특성 숫자, 함수, 프로그램 블록을 다른 형태로 변환 지정한다. (간단하게 치환)
-다양한 선언이 가능하다.
-조건은 선언 된 그 줄에 만 적용된다.
-정의 내용을 해제하려면 #undef을 사용하면 정의 된 것이 없었던 것이 된다.
#if
-바로 뒤에 상수 또는 이미 정의된 문자 상수가 온다. 평가 값이 0 이면 다음줄 부터의 내용을 건너 뛰고, 평가 값이 0 이 아니라면 처리한다.
#ifdef
-#if와 마찬가지로, 단지 뒤에 나오는 식별자가 #define으로 정의가 되어있으면 처리 하고, 그렇지 않으면 건너 뛴다.
#if defined
-if defined에서 defined 는따라 오는 식별자가 정의 되어있으면 1 그렇지 않으면 0 으로 평가 한다.
#ifndef
-if not defined 이다,
#else, #elif
-전처리기의 조건부 컴파일은, if문의 else와 유사하게 #else를 가지고 있고, else if와 유사하게 #elif를 가지고 있다. 방식도 유사하다고 한다.
#endif
-조건부 컴파일의 종료를 나타낸다.
#pragma
-컴파일러에게 특성 옵션이나 라이브러 형태등을 지정할 수 있다.
-다양하므로 한마디로 정의 할 수 없다.
-여러가지 환경에 적응할 수 있도록 컴파일러 마다 그리고 CPU 및 시스템 특성에 맞는 것들이 추가되거나 삭제된다.
헤더파일
-헤더파일이란, C언어 코드를 작성할 때 코드의 맨 위에 적고 문법을 사용하기 위해 참조하는 것이다
헤더파일 특징
-헤더파일 안에는 라이브러리 함수라는 것이 들어 있다.
-라이브러리 함수란 프로그래머가 쉽게 이용할 수 있도록 미리 만들어 놓은 다양한 기능들의 함수를 말한다.
-라이브러리 함수를 이용하기 위해서는 해당함수의 원형과 함수 정의가 포함되어 있는 헤더파일을 불러와야만 사용할 수 있다.
-예를 들어 #include <stdio.h> 이 헤더파일에서는 printf와 scanf등 일반적으로 써야되는 문법들을 사용 할 수 있게 해준다.
자주 사용 되는 헤더 파일의 종류들
1. stdio.h
기능: 표준 입출력
함수: printf, scanf, if, for, while 등 기본적인 함수들.
2. stdlib.h
기능: 메모리 관리와 유용한 함수
함수: rand, malloc, exit 등
3. string.h
기능: 문자열 처리
함수: strcpy, strlen 등
4.time.h
기능 : 날짜와 시간
함수 : time, asctime 등
5. math.h
기능 : 수학, 수치계산
함수 : sin, lig, sqrt 등
6. ctype.h
기능 : 문자처리(판단, 변환)
함수 : isapha, tolower 등
이 외에도 많은 헤더 파일이 있다.
헤더파일 사용법
-#include <헤더파일 이름>을 코드 맨위에 적어두면 실행 시 적용 된다.
헤더파일 사용 예
-대표적으로 C언어에서 많이 사용하는 printf함수는 stdio.h 표준 라이브러리에 존재한다.
#include <stdio.h>
int main()
{
printf("출력 함수 사용 예\n");
return 0;
}
-여기서 실시간 라이브러리 함수 printf 코드는 라이브러리 파일에 존재하고, stdio.h 헤더 파일에 형이 선언 되어 있다.
'programming > c, c++' 카테고리의 다른 글
[C언어]컴파일러의 실행 단계 (0) | 2017.12.16 |
---|---|
[C언어]고급언어와 저급언어(기계어, 어셈블리어) (0) | 2017.12.16 |
[C언어 프로젝트]효민타자연습기 (0) | 2017.12.15 |
프로그래밍에 대한 기초적인 개념 (0) | 2017.12.15 |
[C언어] 포인터 장단점, 포인터와 배열의 차이 (0) | 2017.12.14 |
- hacking
- glibc
- pwnable
- tcache
- 본선가고싶다
- SQLi
- pwable
- oob
- fastbin
- shellcoding
- overflow
- exit
- srop
- pwnable.tw
- 해킹
- heap
- FSB
- fsop
- fastbindup
- HackCTF
- TLS
- ebp change
- rt_sigreturn
- codegate
- stack reusing
- Total
- Today
- Yesterday