-
5주차 수업후 과제카테고리 없음 2025. 4. 14. 16:34
모든 사진 출처는 smlie han의 C언어 교재
전처리기는 일반적으로 컴파일하기 전 프로그림에 대한 일련의 작업을 수행
일반적으로 main 함수 외부에 작성
모든 전처리기는 #기호를 명령어 앞에 붙이며 마지막 문장의 끝을 나타내는 세미콜론 기호를 사용하지 않음
define문
매크로 상수,매크로 함수를 만들 때 사용
매크로명(매크로 상수명):
매크로 또는 매크로 상수는 프로그램 전체에서 하나의 기호 상수를 다른이름으로 대치시키도록 전처리기에게 알려줌
매크로명은 모두 대문자,단어 사이는 언더스코어를 사용
매크로 함수(function-like macro)
매크로명 다음에 괄호가 오고 괄호 안에는 매개변수
치환리스트의 매개변수들은 부작용 방지를 위해 일일이 괄호로 묶어 줌
매개변수의 자료형의 관계 없이 하나의 매크로 함수로 구현이 가능하다는 장점이있음
#pragma
컴파일러 기능을 지정하는 전처리기
모든 c 컴파일러에서 동작하는 것은 아님
GCC4.0이상에서 동작
MSVC++에서는 동작
#include문
파일을프로그램에 포함시키고자 할때 사용한다
각종 라이브러리 함수의 프로토타입,이나 구조체의 데이터 형 선언등이 들어있는 헤더 파일을 프로그램에
포함시키고자 할 때 많이사용
<> 사용 시 이미 있는 표준 헤더파일을 포함시킬때 사용
" " 사용 시 표준 헤더 파일이 아닌 프로그래머가 만든 파일을 포함 시킬때 사용
대부분의 입출력 함수들은 stdio.h 헤더 파일에 포함되어 있음
조건부 컴파일
#if~#endif
해당 부분을 컴파일할 것인지 하지 않을 것인지를 판단하는 처리기
#ifdef~#endif
해당 매크로가 미리 정의되어 있으면 나열된 문장을 컴파일
#ifndef~#endif
해당 매크로가 미리 정의되어 있지 않을 때 나열된 문장을 컴파일
그외 전처리기
#은 매크로 함수의 매개변수를 문자열로 만듦
##은 두 개의 토큰을 결합시킴
미리 정의된 매크로(predefined macro)
프로그래머를 위하여 컴파일러가 미리 제공하는 매크로
실전문제
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#define avg(a,b,c,d) ( ((a) + (b) + (c) + (d)) / 4.0 )int main(void){int kor, eng, mat, sic, total;char name[10];printf("이름을 입력 받으세요 => ");gets_s(name, sizeof(name));printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("┃ 총점과 평균을 구하는 프로그램입니다. ┃\n");printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n");printf("국어 점수를 입력하고 Enter를 누르세요 => ");scanf("%d", &kor);printf("영어 점수를 입력하고 Enter를 누르세요 => ");scanf("%d", &eng);printf("수학 점수를 입력하고 Enter를 누르세요 => ");scanf("%d", &mat);printf("과학 점수를 입력하고 Enter를 누르세요 => ");scanf("%d", &sic);total = kor + eng + mat + sic;printf("\n당신의 총점은 %d이고, 평균은 %.2f입니다.\n",total, avg(kor, eng, mat, sic));printf("지금은 %s이고, 제 이름은 %s입니다\n",__TIMESTAMP__, name);return 0;}