선행처리기란?

  • 컴파일하기 전에 프로그램 선두에 선언된 지시자들(선행처리 지시문)을 처리하는 역할
    • 실행 파일 만드는 단계 : 선행처리 → 컴파일 → 링킹
  • 즉, 사용자가 정의한 각종 내용(선행처리)을 컴파일러가 컴파일하기 좋게 소스를 재구성해주는 역할
  • 선행처리기의 종류와 기능
    선행처리기 기능
    #include 파일 포함
    #define 매크로 정의
    #undef 정의된 매크로 삭제
    #line __LINE__ 매크로와 __FILE__ 매크로 재정의
    #error 지정한 오류 메세지 출력, 컴파일 과정 중단
    #pragma 운영체제별로 달라지는 지시사항 전달 (프로그램 이식성)
    #if, #else, #elif, #endif 조건부 컴파일
  • 특징 및 사용 시 주의사항
    1. 반드시 #로 시작
    2. 명령문 끝에 세미콜론(;)을 붙이지 않음
    3. 한 줄에 하나의 명령만 작성
    4. 대부분 소스 프로그램의 첫 부분에 위치
    5. 선행처리문이 위치한 곳에서부터 파일의 끝까지에만 영향을 미침

#include

  • 주로 헤더 파일(*.h)을 현재 파일에 포함할 때 사용
  • 형식
    • #include <파일명> : 표준 헤더 파일을 포함할 때 사용
    • #include "파일명" : 사용자가 직접 작성한 헤더 파일을 포함할 때 사용
    • 큰 따옴표를 사용하면 먼저 현재 작업 디렉터리에서 해당 파일을 찾고, 없으면 표준 시스템 디렉터리에서 검색
  • 표준 헤더 파일
    • ctype.h : 문자 검사
    • math.h : 수학 함수
    • stdlib.h : 문자열 변환, 기억공간 할당
    • stdio.h : 표준입출력함수
    • string.h : 문자열 관련
    • time.h : 시간 관련
  • 표준입출력함수 (I/O함수)
    표준출력함수 기능 표준입력함수 기능
    printf() 여러 종류의 자료 출력 scanf() 1개 이상의 자료 입력받음
    putchar() 1개의 문자 출력 getchar() 1개의 문자를 입력받음
    puts() 문자열 출력 gets() 문자열을 입력받음
    1. printf()
      • 양식 지정 출력 함수
      • 형식 : printf("출력 양식", 변수1, 변수2, ...);
      • 출력 양식 변환 기호
        %문자 변환 형식 인자의 자료형
        %c 하나의 문자 char, short int, int
        %s 문자열 char *
        %d 부호 있는 10진 정수 char, short int, int
        %i 부호 있는 10진 정수 (%d와 동일) char, short int, int
        %f 고정 소수점으로 표현한 실수 (소수점 이하 6자리까지 표현) float, double
        %o 부호 없는 8진 정수 unsigned int
        %u 부호 없는 10진 정수 unsigned int
        %x, %X 부호 없는 16진 정수 (소문자, 대문자 사용) unsigned int
        %e, %E 부동 소수점으로 표현한 실수 (e-표기법, E-표기법) float, double
        %g(%G) 값에 따라 %f나 %e(%E)를 사용함. float, double
        %% 퍼센트(%) 기호 출력 -
      • 출력 양식 편집 : %문자에 숫자 또는 - 지정
      • 예)
        코드 결과
        printf(" This is an example \n"); This is an example
        printf("a=%d, b=%c, c=%d \n", 20, 'A', 'A'); a=20, b=A, c=65
        printf("|%-5d| \n", 123); // 총 5자리로 왼쪽부터 채워짐 |  123|
    2. scanf()
      • 양식 지정 입력 함수
      • 형식 : scanf("입력 양식", &변수1, &변수2, ...);
      • 입력 양식에 "%문자"가 아닌 다른 문자를 포함하면 안됨
      • 문자열과 배열명을 제외한 모든 변수 앞에 주소연산자(&) 사용
      • 입력 양식 변환 기호
        %문자 변환 기능
        %c 하나의 문자
        %s 문자열
        %d 10진 정수
        %ld long 정수
        %lld long long 정수
        %f 실수
        %lf double 실수
        %o 8진수
        %x 16진수
      • +) Visual Studio에서는 scanf()가 권장하지 않는 함수이므로 도입부에 '#pragma warning(disable:4996)' 추가
    3. putchar()
      • 문자 단위의 출력 함수
      • 형식 : putchar(문자);
      • 괄호 안에 인자(문자) :  정수형 변수, 정수형 상수, 문자형 변수, 문자 및 수식
      • 예) putchar('A'); putchar('A'+1); // 결과 : AB
    4. getchar()
      • 문자 단위의 입력 함수
      • 형식 : getchar();
      • 문자가 저장되는 변수는 정수형이나 문자형
      • 괄호 안에 인자를 지정하지 않음
      • 예) char a; a = getchar();
    5. puts()
      • 문자열 단위의 출력 함수
      • 형식 : puts(변수);
      • 문자열 출력 후 자동 줄바꿈 (문자열 끝인 null 문자('\0')를 만나면 '\n'으로 출력)
      • printf()는 자동 줄바꿈이 적용되지 않음
      • 예) char s[] = "seoul"; puts(s); // 결과 : seoul
    6. gets()
      • 문자열 단위의 입력 함수
      • 형식 : gets(변수);
      • 변수는 배열명이나 포인트 변수여야 함
      • 엔터 키를 누르면 null 문자('\0')가 입력되어 문자열의 끝을 나타냄
      • 예) char s[50]; gets(s);

#define

  • 매크로를 정의할 때 사용
    • 매크로 : 자주 사용되는 함수나 명령, 수식 또는 상수에 이름을 붙여 간단하게 사용할 수 있게 하는 것 (가독성 증가)
  • 매크로 상수
    • 형식 : #define 매크로명 자료
    • 매크로명은 식별자(identifier)라고도 하며, 프로그램내의 식별자를 자료로 치환하는 것 (매크로 확장;macro expansion)
    • 단, 문자열에 포함된 매크로는 치환 작업이 이루어지지 않음
    • 해제 : #undef 매크로명
  • 매크로 함수
    • 매크로를 사용하여 정의한 함수
    • 선행처리기에 의한 단순 치환 방식
    • 형식 : #define 매크로명(인수) (수식)
    • 인수는 여러 개일 수 있다.
    • 장점
      1. 전달 인자의 자료형을 명시할 필요가 없음
      2. 어떠한 자료형 변수라도 인자로 전달 가능
      3. 그냥 함수보다 속도가 빠름
  • 매크로 사용 시 주의할 점
    1. 매크로명은 대문자 사용
    2. 매크로 정의문 끝에는 세미콜론(;)을 사용하지 않음
    3. 문자열이 한 줄을 넘어설 때는 \ 사용
    4. 매크로 정의를 해제할 때(#undef)는 매크로명만 기입
  • 예)
#define PI 3.141592 // 객체같은 매크로 (object-like macro)

#define STR "실습\
예제"

#undef PI

참고자료

[도서]

- C 프로그래밍 (저자 김형근, 곽덕훈, 정재화 / 2020 발행)

 

[웹사이트]

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

 

'C > C' 카테고리의 다른 글

[C언어] 연산자(operator)  (0) 2024.12.26
[C언어] 변수(variable)와 자료형(data type)  (0) 2024.12.18
[C언어] 정의 및 구조  (0) 2024.12.17

+ Recent posts