1절 변수와 자료형
1. 변수의 표현
n 변수 : 자료를 저장하기 위한 공간
n 변수 선언 : 기억 공간을 확보하는 행위
n 변수명 : 기억 공간에 적절한 이름을 붙이는데, 주소 대신 이름을 이용할 수 있게 한 것
1) 변수명의 생성 규칙
주기억장치 일부 공간에 값을 보관하고, 이름으로 그 값을 가리킴 (이름으로 호출)
(1) 식별자 : 프로그램에서 사용할 변수, 함수, 구조체에 대해 프로그래머가 직접 지정한 이름
(2) 식별자 생성 규칙
o 영어 대소문자(구별함), 숫자, _(언더스코어)
o 첫 글자는 숫자 X
o 중간에 공백 X , 예약어 사용 X
o 변수명 길이 제한 없으나 가능한 31자 이내
(3) 식별자 관습 규칙
o 여러 단어 사용할 경우 : _로 구분, 카멜(두 번째 단어 첫 글자 대문자),
파스칼(모든 단어 첫 글자 대문자)
(4) 예약어
2) 변수의 선언
u 변수에 자료 값을 저장할 주기억장치의 기억공간을 할당하는 것
u 실행문 이전에만 올 수 있음
u { 다음에 곧바로 선언문 위치, 선언문 끝나고 실행문 옴
(1) 변수의 선언
o 자료형 변수명;
o 자료형 변수명 = 초깃값;
o 자료형 변수명1, 변수명2, 변수명3 , … , 변수명n;
o 본체 안의 다른 실행문 뒤에 선언문이 오는 것은 오류로 처리
(2) 변수 선언의 의미
o 값을 대입한다(assign) : 변수에 해당하는 기억 공간에 값을 저장하는 행위
o 초기화 하지 않으면 변수의 기억 공간에는 임의의 값(쓰레기값)이 저장되어 있음
2. 자료형
1) 문자형
u 문자 1개 표현
u 1Byte 기억공간 차지
문자 자료형 |
크기 |
유효 범위 |
char |
1 byte |
-128 ~ 127 |
signed char |
1 byte |
-128 ~ 127 |
unsigned char |
1 byte |
0 ~ 255 |
u 아스키코드 : 7비트 표현방식 -> 128( )개의 문자조합
아스키 코드 |
10진수 |
16진수 |
0 ~ 9 |
48 ~ 57 |
0x30 ~ 0x39 |
A ~ Z |
65 ~ 90 |
0x41 ~ 0x5A |
a ~ z |
97 ~ 122 |
0x61 ~ 0x7A |
2) 정수형(고정 정수형)
u 소수점을 표시하지 않는 수치를 위한 자료형
정수 자료형 |
의미 |
크기 |
유효 범위 |
(signed) short (int) |
작은 정수 |
2 byte |
-32768 ~ 32767 |
unsigned short (int) |
부호 없는 |
2 byte |
0 ~ 65535 |
(signed) int |
정수 |
4 byte |
약 -21억 ~ 약 21억 |
Unsigned (int) |
부호 없는 |
4 byte |
0 ~ 약 42억 |
(signed) long (int) |
큰 정수 |
4 byte |
약 -21억 ~ 약 21억 |
Unsigned long (int) |
부호 없는 큰 정수 |
4 byte |
0 ~ 약 42억 |
3) 실수형
실수 자료형 |
크기 |
유효 자릿수 |
유효 범위 |
float |
4 byte |
소수점 이하 6 |
약 |
double |
8 byte |
소수점 이하 15 |
약 |
long double |
8 byte |
소수점 이하 15 |
약 |
2절 상수
1. 리터럴 상수
n 프로그램이 실행되는 도중에는 값이 변경될 수 없음
1) 숫자 상수
u 정수형 상수 : 숫자 (10진수), 0숫자 (8진수) 0x숫자 (16진수)
u 실수형 상수
o 3.14(8바이트 더블) =/= 3.14f(4바이트 플로트)
① 소수점 표기법 : 3.14 (더블형 상수로 8바이트) / 0.873f (플로트형 상수로 4바이트)
② 지수 표기법
◇ 지수 표기는 실수를 가수와 지수로 분리해서 표현
◇ 실수를 “가수 * , 가수 e 지수”로 표현
◇ 가수 : 실수나 정수, 지수 : 정수, e 는 대소문자 둘다 가능
2) 문자, 문자열 상수
(1) 문자 체계
o ASCII : 7비트 이용해 128개 문자, 숫자, 특수문자 표현
o 0 : 48 / A : 65 / a : 97
(2) 문자 상수 표현
o ‘문자’, ‘\문자’, ‘\8진수’, ‘\16진수’, “문자열”
① 문자 상수 : 단일 인용 부호 ( ‘ ) 로 묶어서 표현
문자 1개만 표현한 것
② escape문자 : 특별 문자 표현. 백슬래시로 시작 \
Escape |
ASCII |
의미 |
Escape |
ASCII |
의미 |
\0 |
Null |
널 문자 |
\n |
LF |
개행 |
\a |
BEL |
beep음 |
\r |
CR |
열 복귀 |
\b |
BS |
백스페이스 |
\t |
HT |
탭 |
(3) 문자열 상수 표현
o 이중 인용부호 ( “ ) 로 묶어서 표현
o 문자열이 메모리에 저장될 떄 문자 마지막에 널 문자(\0) 추가
o 저장장소 크기 : 문자열 크기 + 1(null)
2. 심볼릭 상수
1) Const 상수
u 상수인 const로 지정하면 그 값을 절대로 바꿀 수 없음
u 처음 상수 정의할 때 값을 초기화 해줘야 함
u 상수의 “기호화” : 변수처럼 이름이 있는 상수
2) 매크로 상수
u #define문 이용
3절 선행처리기
l 선행처리기(전처리기) : 소스 프로그램을 오브젝트 프로그램으로 컴파일하기 전에 수행
l 프로그램 소스 파일이 컴파일 될 수 있도록 준비하는 역할
l #으로 시작하고 명령어 끝에 ; 붙이지 않고, 한 행에 하나만 쓸 수 있음
1. #define 지시자
n 특정 기호 상수를 프로그래머가 정의한 치환 문자열로 대체하는 역할
n 매크로 상수 / 매크로 함수로 나뉨
n 매크로 상수 : 인수를 가지지 않고 단순 치환
n 매크로 함수 : 함수처럼 인수를 가짐
1) #define 사용 시 유의사항
(1) 프로그램에서 첫 칸에 #기호로 시작, 원시 프로그램 내의 어느 곳에서나 지정 가능
(2) 보통 대문자 많이 사용. 중간에 공백 X (소문자로 써도 문법적 오류는 안남)
(3) 끝에 ; 붙이지 않음
(4) 지정 한 줄 내에서만 가능하고, 치환문자열 전부 쓸 수 없을 때 백슬래시 하여 다음 줄에 계속 지정 가능
(5) 매크로를 문자열 상수처럼 이중 인용부호 사이에 지정하면 치환문자열로 치환되지 않음
(6) 매크로명과 인수 기입 위한 괄호 사이에 공백 X, 문자열 전체를 괄호 속에 넣기도 X
2) 매크로 상수 (인수 없는 단순 치환)
u # define 매크로 치환할 값 -> #define MAX 200
u # define 매크로명 치환 문자열 -> #define BEGIN { / #define IINT int
u # define 매크로명 ‘문자 상수’ -> #define STOP ‘@’
u # define 매크로명 “문자열 상수” -> #define STOP “end of data”
3) 매크로 함수 (인수 있는 함수 같은 것)
u 함수처럼 상황에 따라 인수를 지정하기도 하고 문자열 치환도 함
u 컴파일 할 때 함수가 호출되는 것이 아니라 호출된 곳에 코드가 직접 삽입 -> 속도 빨라짐
u 전처리기는 함수가 사용된 곳을 찾아 ( ) 안에 매크로 함수의 인수를 치환할 내용에 매핑하여 문자열 치환을 수행
u #define 매크로 함수명 (인수1, 인수2, … ) 치환할 내용
è #define ADD(x, y) ((x) + (y))
è #define SQUARE(x) ((x) * (y))
(1) 매크로 함수 사용 시 주의사항
① 매크로명과 매개변수를 나타내는 괄호 사이에 공백 X
② 매개변수 내영의 전체 및 각 요소 자제에도 괄호 삽입해야 함
#define EXE1(x) x * x -> EXE1(2+3); -> 2+3 * 2+3으로 결과가 달라짐
#define EXE2(x) ((x) * (x)) -> EXE2(2+3); -> (2+3) * (2+3) 잘 나옴
③ 매개변수로 증감연산자 사용 X
④ 반드시 한 행으로 작성하고, 여러 행 쓸 시 백슬래시 씀
(2) 매크로 함수 사용 시 장단점
① 실제 함수 호출이 일어나지 않아 프로그램 실행 속도 빨라짐
② 사용하는 곳 마다 정의된 코드 치환되므로 코드가 여러 번 복사 되 프로그램 크기가 커짐
③ 크기가 작은 함수만 매크로 함수로 정의하는 것이 효과적
2. #include 지시자
l 파일을 포함하는 지시자 -> 헤더파일 포함하기 위해 사용
l 함수 사용 시 프로그램 안에 해당 함수의 원형 선언이 반드시 포함되어야 되므로 사용
l 라이브러리 함수 사용 시 라이브러리 헤더파일 포함
l #include <라이브러리 헤더 파일> / #include “라이브러리 헤더 파일”
l #include “사용자 정의 헤더 파일” -> 경로 다 적어 줘야 됨(절대 경로)
l #include “사용자 정의 파일”
l 표준 라이브러리 함수와 헤더 파일
헤더 파일 |
기능 |
함수 |
stdio.h |
표준 입∙출력 함수 |
printf(), scanf(), puts(), gets(), … |
stdlib.h |
기본 라이브러리 함수 |
rand(), exit(), atoi(),… |
string.h |
문자열 처리 함수 |
strcpy(), strlen(), strcmp(),… |
conio.h |
콘솔 입∙출력 함수 |
getch(), putch(), |
math.h |
수학 관련 함수 |
abs(), sin(), sqr(),… |
time.h |
시간 관련 함수 |
time(), localtime(), asctime(),… |
ctype.h |
문자 분류 함수 |
isalpha(), islower(), isspace(),… |
memory.h |
메모리 관련 함수 |
memcpy(), memset(), memmove(),… |
3. 조건부 컴파일을 위한 지시자
n 특정 조건을 만족할 때만 특정 코드를 프로그램에 삽입하여 컴파일
1) #if
u 전처리기는 #if를 만나면 조건식이 참일 때 ‘문자 1’을 거짓일 때 ‘문장2’를 소스파일에 삽입
u 두 문장 중 한 개만 선택하여 소스파일에 포함
u 매크로를 정수와 비교하거나 연산할 수는 있지만 실수나 문자열과 비교하는 것은 불가능
u #else문에서 또 다른 조건문을 검사라혀면 #elif문 사용
#if 조건식 문장 1; #elif 조건식 문장 2; #else 문장 3; #endif |
#if (NATION ==1) #include “korea.h” #elif (NATION ==2) #include “usa.h” #else #include “tai.h” #endif |
2) #ifdef, #ifndef, #undef
(1) #ifdef (if defined)
o 매크로가 정의되어 있으면 #ifdef와 #endif 사이의 문장이 소스파일에 삽입되어 컴파일
o 매크로가 정의되어 있지 않으면 #else 뒤의 문장이 소스파일에 삽입되어 컴파일
o #else문은 생략 가능, #elif문 사용 X
(2) #ifndef (if not defined)
o 매크로가 정의되어 있지 않은 경우에 #ifndef와 #endif 사이의 문장이 소스파일에 삽입되어 컴파일
o 매크로가 정의되어 있으면 #else 뒤의 문장이 소스파일에 삽입되어 컴파일
o #else문은 생략 가능, #elif문 사용 X
(3) #undef
o 매크로 정의를 해제
o 이전에 정의된 매크로 정의를 무효로 함
#ifdef 매크로명 문장 1; #else 문장 2; #endif |
#ifndef 매크로명 문장 1; #else 문장 2; #endif |
#undef 매크로명 |
4. 매크로 연산자 #, ##
n # : 인수를 인용 부호가 있는 문자열로 치환 (#있는 곳에 인수를 치환)
#define STR1(A, B) “A은 B의 수도이다.”
è puts(STR1(서울, 대한민국)); -> A은 B의 수도이다.
#define STR2(A, B) #A”은 “#B”의 수도이다.”
è puts(STR2(서울, 대한민국)); -> 서울은 대한민국의 수도이다.
n ## : 두 식별자를 하나로 결합.. concat한다..
#define STR3(Y, M, D) Y ## M ## D
è printf(“생년월일: %d\n”,STR3(93, 04, 21)); -> 생년월일: 930421
'[시험] 독학사 2020 전공기초' 카테고리의 다른 글
[독학사][C프로그래밍] 06 배열과 포인터 (0) | 2020.04.28 |
---|---|
[독학사][C프로그래밍] 05 함수와 기억클래스 (0) | 2020.04.28 |
[독학사][C프로그래밍] 04 제어문 (0) | 2020.04.28 |
[독학사][C프로그래밍] 03 입 ∙ 출력함수와 연산자 (0) | 2020.04.28 |
[독학사][C프로그래밍] 01 C언어의 개요 (0) | 2020.04.28 |