선행처리기란?
- 컴파일하기 전에 프로그램 선두에 선언된 지시자들(선행처리 지시문)을 처리하는 역할
- 실행 파일 만드는 단계 : 선행처리 → 컴파일 → 링킹
- 즉, 사용자가 정의한 각종 내용(선행처리)을 컴파일러가 컴파일하기 좋게 소스를 재구성해주는 역할
- 선행처리기의 종류와 기능
선행처리기 기능 #include 파일 포함 #define 매크로 정의 #undef 정의된 매크로 삭제 #line __LINE__ 매크로와 __FILE__ 매크로 재정의 #error 지정한 오류 메세지 출력, 컴파일 과정 중단 #pragma 운영체제별로 달라지는 지시사항 전달 (프로그램 이식성) #if, #else, #elif, #endif 조건부 컴파일 - 특징 및 사용 시 주의사항
- 반드시 #로 시작
- 명령문 끝에 세미콜론(;)을 붙이지 않음
- 한 줄에 하나의 명령만 작성
- 대부분 소스 프로그램의 첫 부분에 위치
- 선행처리문이 위치한 곳에서부터 파일의 끝까지에만 영향을 미침
#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() 문자열을 입력받음 - 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|
- 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)' 추가
- putchar()
- 문자 단위의 출력 함수
- 형식 : putchar(문자);
- 괄호 안에 인자(문자) : 정수형 변수, 정수형 상수, 문자형 변수, 문자 및 수식
- 예) putchar('A'); putchar('A'+1); // 결과 : AB
- getchar()
- 문자 단위의 입력 함수
- 형식 : getchar();
- 문자가 저장되는 변수는 정수형이나 문자형
- 괄호 안에 인자를 지정하지 않음
- 예) char a; a = getchar();
- puts()
- 문자열 단위의 출력 함수
- 형식 : puts(변수);
- 문자열 출력 후 자동 줄바꿈 (문자열 끝인 null 문자('\0')를 만나면 '\n'으로 출력)
- printf()는 자동 줄바꿈이 적용되지 않음
- 예) char s[] = "seoul"; puts(s); // 결과 : seoul
- gets()
- 문자열 단위의 입력 함수
- 형식 : gets(변수);
- 변수는 배열명이나 포인트 변수여야 함
- 엔터 키를 누르면 null 문자('\0')가 입력되어 문자열의 끝을 나타냄
- 예) char s[50]; gets(s);
- printf()
#define
- 매크로를 정의할 때 사용
- 매크로 : 자주 사용되는 함수나 명령, 수식 또는 상수에 이름을 붙여 간단하게 사용할 수 있게 하는 것 (가독성 증가)
- 매크로 상수
- 형식 : #define 매크로명 자료
- 매크로명은 식별자(identifier)라고도 하며, 프로그램내의 식별자를 자료로 치환하는 것 (매크로 확장;macro expansion)
- 단, 문자열에 포함된 매크로는 치환 작업이 이루어지지 않음
- 해제 : #undef 매크로명
- 매크로 함수
- 매크로를 사용하여 정의한 함수
- 선행처리기에 의한 단순 치환 방식
- 형식 : #define 매크로명(인수) (수식)
- 인수는 여러 개일 수 있다.
- 장점
- 전달 인자의 자료형을 명시할 필요가 없음
- 어떠한 자료형 변수라도 인자로 전달 가능
- 그냥 함수보다 속도가 빠름
- 매크로 사용 시 주의할 점
- 매크로명은 대문자 사용
- 매크로 정의문 끝에는 세미콜론(;)을 사용하지 않음
- 문자열이 한 줄을 넘어설 때는 \ 사용
- 매크로 정의를 해제할 때(#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 |