자료형과 선행 처리기
상수와 변수의 기본 개념.
변수 등에 사용되는 자료형.
변수 선언과 선행 처리기의 종류, 활용 방법.
학습 목표
- 여러 종류의 상수 이해.
- C 언어 변수와 변수 선언에 대한 의미.
- 변수 선언 시 고려할 사항.
- 기본 자료형의 종류와 범위 이해.
- 여러 선행처리기의 용도와 사용방법.
주요 용어
- 상수 (const) : 값이 한번 정해지면 그 값을 변경할 수 없는 수.
- 변수 (variable) : 프로그램 실행도중 변할 수 있는 값이 저장되는 기억공간을 의미.
- 자료형 (data type) : 사용하는 자료의 형태.
- 초기화 : 선언된 변수에 특정 값을 부여하는 것.
- 선행처리기 : 컴파일 하기 전에 미리 수행되어야 할 처리기.
상수와 변수
자료형
- 프로그램에서 사용하는 자료의 형태.
- 상수와 변수로 구분하여 사용.
- 프로그램에서 자료(data)를 처리하기 위해 자료의 생성/처장/처리과정이 필요.
- C 언어.
- 수많은 명령어와 자료들로 구성.
- 이들 자료의 정확한 처리와 효율적인 활용 필요.
- C 언어는 여러가지 종류의 자료형(data type)을 지원.
상수 (constant)
- 항상 고정된 값을 갖는 자료.
- 값이 한번 정해지면 프로그램 도중 그 값을 변경할 수 없는 수.
- 정수형 상수.
- 10, 8, 16진수
구분 예 비고 10진 상수 10, -10, 999 0~9까지의 숫자를 사용. 0으로 시작 불가. 8진 상수 011, 055 0~7까지 숫자를 사용, 숫자 앞에 0을 붙임. 16진 상수 0xac, 0X2A 0 9, AF를 사용, 숫자 앞에 0x나 0X를 붙임.unsigned형 상수 12u, 067u, 0XFAU 부호 없는 상수를 표현하며, 숫자 뒤에 u나 U를 붙임. long형 상수 12345l, 0XFFL 큰 길이의 정수를 표현, 숫자 뒤에 l이나 L을 붙임.
- 실수형 상수.
- 부동소수점 형 상수.
- double형을 기본 자료형으로 사용.
구분 예 비고 소수 형식 12.345, 3.14, .5 소수점을 사용하여 표현. 자수 형식 12E3(=12000), 5e-2(=0.005) 10진수와 e(E)를 사용하여 표현. float형 상수 3.14f, 3.14e-3F 숫자 뒤에 f나 F를 붙임. long double형 상수 3.14l, 3.14E-3L 숫자 뒤에 l이나 L을 붙임.
- 문자형 상수.
- 단일 인용부호 '' 로 묶여 있는 1개의 영문자나 숫자문자.
- 내부적으로는 해당문자의 ASCII CODE 값이 사용.
- escape 문자
excape 기능 \a 경고음 (alert) 출력 \b 백 스페이스 (back space) \f 새 페이지 (foam feed) \n 출력 시 줄 바꿈 (new line) \r 커서를 행의 시작 위치로 이동 (carriage return) \t 수평 탭 (horizontal tab) \0 ASCII 코드 값이 0인 문자 (null 문자)
- 문자열 상수.
- 이중 인용부호 ""로 묶여 있는 복수개의 영문자나 숫자.
- 기억공간에 보관될 때는 문자열 끝에 null 문자 \0가 추가.
- 정수형 상수.
변수(variable)
- 변할 수 있는 값.
- 프로그램 실행 도중 변할 수 있는 값이 저장 되는 기억공간을 의미.
- i = 10; 은 i는 변수명이고, 10이란 값을 i라는 이름으로 정의된 기억공간에 저장한다는 의미.
- 이런 변수 속에 들어가는 값은 수시로 변경될 수 있음.
- 변수는 사용 전에 반드시 선언하여 컴파일러가 기억공간에서 일정 공간을 확보할 수 있도록 해야 함.
변수의 특징
- 모든 변수는 이름이 있다.
- 모든 변수는 정해진 자료형이 있다.
- 모든 변수는 할당된 값을 갖는다.
변수의 정의 규칙
- 모든 변수는 사용전에 선언되어야 함.
- 반드시 영문자나 밑줄로 시작해야 함.
- 중간에 _ 이외의 특수문자를 섞어 사용할 수 없음.
- 대,소문자 구분 해야함.
- 예약어는 사용할 수 없음.
변수의 사용 예
#include <stdio.h>
void main() {
int a, b; // 정수형 변수 a, b 선언.
a = 100; // 변수에 값 대입.
b = 50;
printf("a=%d, b=%d\n", a, b);
}
자료형과 변수 선언
- 변수.
- 자료를 저장할 기억공간을 확보하고, 이 공간에 이름을 붙인 것.
- 변수 선언.
- 확보된 기억공간에 이름을 부여하는 것.
- 이러한 변수 선언을 위해 자료형이 필요.
자료형의 종류
- 기본형 (primitive)
- 정수형 (integer type)
- int, short, long, unsigned
- 실수형 (floating-point type)
- float, double, long double
- 문자형 (charactor type)
- char, unsigned char
- 열거형 (enumerated type)
- enum
- 형 없음
- void
- 정수형 (integer type)
- 확장형
- 배열 형 (array type)
- 함수 형 (function type)
- 포인터 형 (pointer type)
- 구조체 형 (structure type)
정수형
- int, short, long, unsigned
- 운영체제에 따라 표현 범위가 다름.
정수형 | 표형 범위 | 크기 |
---|---|---|
short int | -32768 ~ 32767 | 2 byte |
long int | -214783648 ~ 214783647 | 4 byte |
int | -2147483648 ~ 2147483647 | 4 byte |
unsigned short int | 0 ~ 65535 | 2 byte |
unsigned long int | 0 ~ 429496795 | 4 byte |
unsigned int | 0 ~ 42959667295 | 4 byte |
실수형
- float (4 byte), double (8 byte), long double (8 byte)
문자형
- char, unsigned char
- ASCII 코드를 사용하여 처리.
정수형 | 표형 범위 | 크기 |
---|---|---|
char | -128 ~ 127 | 1 byte |
unsigned char | 0 ~ 255 | 1byte |
- 문자형 사용의 예
#include <stdio.h>
int main()
{
printf("Hell The C\n");
char ch;
int in;
ch = in = 'A';
printf("ch = %d\n", ch); // ASCII 코드 출력
printf("in = %d\n", in); // ASCII 코드 출력
return 0;
}
열거형
숫자 대신 단어 사용
형싱 : enum 태그명 {열거자1, 열거자2, ...}
열거형의 사용 예
#include <stdio.h>
int main()
{
enum day1 { SUN, MON, TUE, WED, THU, FRI, SAT } d1;
enum day2
{ sun = 2, mon, tue, wed, thu, fri, sat } d2;
d1 = WED;
d2 = wed;
printf("열거형 d1에 저장된 값 %d\n", d1); // 3
printf("열거형 d2에 저장된 값 %d\n", d2); // 5
return 0;
}
변수 선언
- 변수명과 변수가 가질 자료형을 지정하여 변수를 위한 기억공간을 할당하는 것.
- 형식 : 자료형 변수명;
- 사용 예
- 정수 -> int 변수명;
- 문자열 -> char 변수명 [문자수 + 1];
변수 선언 시 고려 사항
변수에 저장될 값의 크기(범위).
#include <stdio.h> void main() { short int n1, n2; n1 = 32767 + 1; n2 = -32768 - 1; printf("n1 = %d\n", n1); // -32768 printf("n2 = %d\n", n2); // 32767 // 자료형 범위가 넘어가면 다른 값이 나옴. }
변수 선언 위치.
전역 변수로 선언 -> 프로그램 어디서나 사용 가능.
지역 변수로 선언 -> 함수 내에서만 사용 가능.
#include <stdio.h> int n = 100; // 전역변수 n 선언 void func() { int n = 200; // 지역변수 n 선언 printf("n in func() : %d\n", n); // 200 } int main() { printf("n in main() : %d\n", n); // 100 func(); return n; }
변수의 초기화.
#include <stdio.h> int main() { int i, sum; for (i = 1; i < 10; i++) { sum += i; } printf("from 1 to 10 : %d\n", sum); // 32811 return n; }
선행처리기 (preprocessor)
- 컴파일에 앞서 프로그램 선두에 선언된 지시자들을 밀리 처리하는 역할 수행.
선행처리기 | 기능 |
---|---|
#include | 파일 포함 |
#define | 매크로 정의 |
#if #else #elif #endif | 조건부 컴파일 |
선행처리기 사용시 주의점
- 반드시 #으로 시작해야 함.
- 명령문 끝에는 ;을 붙이지 않음.
- 한줄에 하나의 명령만 쓴다.
- 소스 프로그램의 첫 부분에 위치한다.
파일 포함 : include
- C언어에서 제공하는 헤더파일(*.h)을 자신의 소스파일에 읽어 들여 함께 컴파일 하고자 할 떄 사용.
- 표준함수인 printf(), scanf()
- 이 함수들의 원형 (prototype)이 선언되어 있는 표준 입출력 헤더파일인 stdio.h를 include 해야 함.
- 형식
- #include <파일명>
- #include "파일명"
- 사용 예
- #include <stdio.h>
- #include "stdio.h"
- #include "/tc/lib/math.h"
- 기능
- #include 다음에 제시된 파일을 현재 프로그램에 포함시킴.
- <파일명>은 표준 디렉토리(보통 include)에서 파일을 찾아 포함.
- "파일명"은 현재 사용 중인 디렉토리나 지정된 디렉토리에서 파일을 찾아 포함하며, 또는 드라이브나 경로를 사용.
매크로 정의 : #define
- 매크로를 정의할 때 사용.
- 매크로 macro.
- 선행처리기 #define을 사용하여 단순 치환되는 자료.
- 프로그램 작성 시에 명령이나 수식 또는 상수 값이 자주 사용될 때 이들을 대표하는 이름을 붙여 사용하는 대상.
- 매크로 정의.
- 매크로 상수 정의.
- 매크로 함수 정의.
매크로 상수 정의
- 형식
- #define 매크로명 자료
- #define 매크로명
- 사용 예
- #define PI 3.141592
- 이는 프로그램 내의 PI는 3.141592로 치환하라는 것.
- 기능
- 프로그램에 나오는 매크로 명을 지정한 자료로 치환한 후, 컴파일하거나 (#define), 정의 해제(#undef) 한다.
#include <stdio.h>
#define ADDR "192.168.0.1"
#define TEL "010-1234-5678"
int main()
{
printf("ADDR : %s\n", ADDR);
printf("TEL : %s\n", TEL);
return 0;
}
매크로 함수 정의
- 형식
- #define 매크로명 (인수) (수식)
- #define 매크로명 (인수, 인수) (수식)
- 사용 예
- #define AREA(x) (3.14 * (x) * (x) )
- #define HAP(a, b) ( a + b )
- 장점
- 선행처리기에 의해 단순 치환 방식이므로, 전달 인자의 자료형을 명시할 필요가 없음.
- 어떠한 자료형 변수를 인자로 전달해도 잘 작동함.
- 한 두 줄의 코드인 경우 함수로 정의하는 것 보다 속도가 빠름.
#include <stdio.h>
#define ADD1(x, y) x + y
#define ADD2(x, y) ((x) + (y))
#define MULTIPLY1(x, y) x *y
#define MULTIPLY2(x, y) ((x) * (y))
int main()
{
int a1, a2, m1, m2;
a1 = 10 * ADD1(3, 4);
a1 = 10 * ADD2(3, 4);
m1 = MULTIPLY1(1 + 2, 3 + 4);
m2 = MULTIPLY2(1 + 2, 3 + 4);
printf("a1 : %d, a2 : %d\n", a1, a2);
printf("m1 : %d, m2 : %d\n", m1, m2);
return 0;
}
조건부 컴파일 : #if #else #elif #endif
- 조건에 따라 프로그램을 컴파일하는 명령.
- 최적의 코드로 프로그램을 작성할 수 있기 때문에 시스템 성능 향상.
- #if, #elif 다음에는 컴파일 여부를 결정하는 조건문 필요.
- 조건문은 선행처리과정에서 진위 여부를 판단할 수 있어야 함.
- 변수 지정이나 함수 호출 불가.
- 주로 매크로 값이 사용.
#include <stdio.h>
#define CON 0
int main()
{
#if CON
printf("\n COMPILE IF \n");
#else
printf("\n COMPILE ELSE \n");
#endif
return 0;
}
728x90
반응형
'Language > C' 카테고리의 다른 글
[C] 함수와 기억 클래스 - 1 (0) | 2020.12.20 |
---|---|
[C] 선택 제어문과 반복 제어문 (0) | 2020.12.20 |
[C] 입출력 함수와 연산자 - 2 (0) | 2020.12.20 |
[C] 입출력 함수와 연산자 - 1 (0) | 2020.12.15 |
[C] C 언어의 개요 (0) | 2020.12.13 |