임베디드 시스템 - (3) C언어 종합

임베디드 시스템
- (3) C언어 종합
Konkuk Univ.
Dept. of Electronics
Konkuk Univ. Dept. of Electronics
1
C 언어 역사 및 특징
• C 언어의 역사
– 1972년 벨 연구소의 Brian Kemighan와 Dennis Ritchie에 의해서
개발되어 UNIX 운영체제를 위한 시스템 언어로서 사용
• 어셈블리어를 고급언어로 표현
• 종래의 B 언어를 기초로 개발
– 1983년 미국표준협회(ANSI: American National Standard
Institute)에 ANSI 표준 C를 발표
Konkuk Univ. Dept. of Electronics
2
C 언어 역사 및 특징 – cont.
• C 언어의 특징
– 범용 프로그래밍 언어
– 이식성이 높다(다른 플랫폼으로 이식)
– 형식이 자유롭다. 작성하기 쉽다.
– 실행화일의 크기가 작고 실행속도가 빠르다.
– C 언어는 함수, 즉 모듈을 제공한다.
– 하드웨어를 다루기 쉽다
• 포인터를 이용하여 하드웨어 자원을 제어할 수 있다.
• 하드웨어를 파일 개념으로 처리한다.
– 단점 : 배우기 어렵다. 초보자가 작성하기 어렵다. 그래픽 작업이
어렵다.
Konkuk Univ. Dept. of Electronics
3
프로그램 개발 과정
C source code
Source.c
compiler
Object file
Source.obj
Other Object File
linker
Library
executable file
Source.exe
Konkuk Univ. Dept. of Electronics
4
프로그램 개발 과정 – cont.
Source file 1
compile
Object file 1
link
Source file 2
compile
Execution file
Object file 2
Start-up code
link
Source file
compile
Execution file
Object file 2
Konkuk Univ. Dept. of Electronics
5
프로그램 개발 과정 – cont.
• 소스 코드 편집 과정(editor)
– 편집기(editor)를 이용하여 프로그래밍 언어로 소스 코드를 생성하
는 과정
•
컴파일 과정(compiler)
– 컴파일러를 이용해 소스 코드를 기계어로 변경하는 과정, Object
파일을 생성한다.
•
링크 과정(link)
– 컴파일러가 만든 object 파일을 실행에 필요한 다른 코드와 연결하
여 실행파일을 만든다.
•
실행
– 프로그램을 실행한다.
Konkuk Univ. Dept. of Electronics
6
프로그램 개발 과정 – cont.
• source file
– 프로그램을 작성한 텍스트 파일
• object file
– 컴파일러에 의해 생성된 원시파일
• library
– 사전에 정의된 목적 파일들
• executable file
– 바로 실행 가능한 파일
Konkuk Univ. Dept. of Electronics
7
프로그램 개발 도구
• Editor/Compiler/Linker
– 소스 작성, 컴파일, 링크 과정을 별도의 프로그램을 이용해서 개발
– 명령 프롬프트에서 모든 과정을 명령어를 통해서 진행한다.
•
IDE(Integrated Development Environment)
– 하나의 프로그램에서 Edit, Compile, Link 과정을 수행하여 개발 편
의 제공
– Turbo C, Visual Studio, Keil C 등
Konkuk Univ. Dept. of Electronics
8
C 언어 프로그램의 구조
#include<stdio.h>
void func();
Header
C
프
로
그
램
main() 함수
기타 함수
Konkuk Univ. Dept. of Electronics
void main(void)
{
int a;
func();
printf(“Hello!”);
}
void func()
{
….
}
9
C 언어 프로그램의 구조 – cont.
• C 프로그램 구조
– 함수 기반의 언어로 최소한 1개 이상의 함수들로 구성.
• 반드시 main 함수가 있어야 한다.
• 하나의 프로그램은 단 하나의 main()함수를 가져야 한다
– main 함수 이전에 다른 함수들의 선언이 필요하다.
• #include<...>를 이용해서 Library를 포함
• 함수 프로토타입을 선언 (함수부분에서 자세히 수업)
• 미리 함수를 선언해 두어야 main 함수에서 이용 가능
– 함수가 수행하는 단계들을 중괄호로 묶어서 본체구성
• {} 사이에 함수가 수행할 문장들을 작성
Konkuk Univ. Dept. of Electronics
10
C언어의 기본문법과 입출력
• 함수의 구성 요소
–
–
–
–
–
리턴 타입 : 함수 처리 후 반환될 자료형
함수 이름 : 함수의 이름
파라메터 리스트 : 함수에 전달할 매개변수 리스트
문장들 : 함수 안에서 처리되는 명령 단위
형식
[리턴타입] [함수이름]( [매개변수리스트] )
{
[문장들];
}
– 예
int sum(int x, int y)
{
int result = x + y;
return result;
}
Konkuk Univ. Dept. of Electronics
11
C 프로그램 구성요소
•
Reserved word : 예약어
•
Identifier : 식별자
•
Operator : 연산자
•
Constant : 상수
•
Punctuator : 구분기호
•
White space : 공백문자
•
Comment : 설명문
Konkuk Univ. Dept. of Electronics
12
C 프로그램 구성요소 – cont.
•
Reserved word : 예약어
– C언어에서 미리 정의하여 그 의미를 부여하고 있는 단어
– 기능과 역할이 정의 되어 있어 프로그래머에 의해 다른 용도로
사용할 수 없다.
– 많은 다른 컴파일러들인 자신들에 추가된 예약어 존재
예약어 종류
예
자료형
int, char, short, unsigned, float, double, typedef, struct,
union
제어문
for, while, if, else, switch, case, break, do, continue,
default
연산자
sizeof
Konkuk Univ. Dept. of Electronics
13
C 프로그램 구성요소 – cont.
•
Identifier : 식별자
– 프로그램을 작성할 때 정의하는 변수나 함수, 배열, 사용자가 정의
한 자료형 등의 이름으로 사용되어 질 수 있는 것을 의미
– 예약어, 연산자, 상수, 구분기호, 공백문자는 사용할 수 없다.
– 식별자 작성 규칙
• 영문자와 숫자 그리고 밑줄( _ )를 이용하여 구성한다.
• 시작은 문자나 _ 로 시작해야 한다.
• 식별자 크기는 제한이 없지만 8자리까지만 유효하다.
• 영문 대/소문자를 구별한다.
Konkuk Univ. Dept. of Electronics
14
C 프로그램 구성요소 – cont.
•
Operator : 연산자
–
–
–
–
–
–
–
산술연산자: +, -, *, /, %
대입연산자: =, +=, -=, *=, /=, %=, <<=, >>=
증감연산자: ++, -관계연산자: >, <, ==, !=, >=, <=
논리연산자: &&, ||
비트연산자: &, |, ^, <<, >>
그외 연산자: sizeof, ? :
– 수학에서 사용하는 = 와 C 프로그래밍의 = 의미는 다르다.
Konkuk Univ. Dept. of Electronics
15
C 프로그램 구성요소 – cont.
•
Constant : 상수
– 수치상수, 문자상수, 문자열 상수 세가지가 존재
종류
수치
상수
정수
실수
문자 상수
문자열 상수
방법
예
10진수
20, 120
16진수 앞에 0x 를 붙임
0xF12, 0x2A
8진수 앞에 0을 붙임
0763, 0321
소수점을 사용, 끝에 f를 붙임
20.01, 120.21
20.01f, 120.21f
작은 따옴표를 사용
‘a’, ‘B’, ‘Y’
큰 따옴표를 사용
“A”, “AB”, “abc”
Konkuk Univ. Dept. of Electronics
16
C 프로그램 구성요소 – cont.
•
Punctuator : 구분기호
–
–
–
–
–
–
–
–
–
각 항목을 구분 짓는 용도로 사용
문장의 끝에 위치하는 ; 세미콜론
goto문의 라벨에 사용되는 : 콜론
제어문의 블록등에 사용되는 {} 중괄호
배열을 선언하기 위해 사용하는 [] 대괄호
제어문의 조건식에서 사용되는 () 괄호
문자 상수에서 사용되는 ‘ ‘ 작은 따옴표
문자열 상수에서 사용되는 “” 큰 따옴표
헤더파일에 사용되는 <> 부등호
Konkuk Univ. Dept. of Electronics
17
C 프로그램 구성요소 – cont.
•
White space : 공백문자
– 각 요소를 구분 짓는데 사용 공백, 탭, 엔터가 있음
– C 프로그램에서는 세가지를 동일 하게 취급하며 공백 문자가 연속
해서 나오면 하나로 인식
– 다음 두 소스는 동일
#include<stdio.h>
#include<stdio.h>
void main(void)
{
printf(“Hello!”);
}
void main(void){ printf(“Hello!”); }
Konkuk Univ. Dept. of Electronics
18
기본 예제
/* 첫 번째 C 프로그램 */
#include<stdio.h>
void main(void)
{
printf(“Hello!”);
}
Konkuk Univ. Dept. of Electronics
•
•
•
•
Comment
Preprocessor
Main Function
표준 출력 함수
(printf(“…”);)
19
기본 예제 – cont.
•
Comment
–
–
–
–
주석, 설명문이라고 하며 프로그램의 전반적인 설명을 입력할 때 사용
주석 처리된 부분은 컴파일시에 무시됨
C 언어 /* 로 시작 해서 */ 로 끝나는 곳 까지 주석
C++은 // 을 사용
// 의 시작부터 줄이 바뀔 때까지 주석처리
C/C++ 통합 툴에서는 /* */와 //을 모두 사용가능
– 자주 사용되는 주석의 위치
• 1. 프로그램의 시작 부분
– 프로그램에 대한 개괄적인 정보나 작성자 및 작성일자를 포함한 기본 정
보
• 2. 함수의 시작 부분
– 함수의 입/출력 정보와 함수의 쓰임새 정보
• 3. 문장 작성 바로 뒤 부분
– 해당 문장의 의미가 분명하기 않을 경우 설명을 위해
Konkuk Univ. Dept. of Electronics
20
기본 예제 – cont.
Konkuk Univ. Dept. of Electronics
21
기본 예제 – cont.
•
Preprocessor
– 전처리문이라고 하며 컴파일 이전에 미리 처리 되는 문장: 컴파일러는
전처리문에서 작성해 놓은 작업을 먼저 수행한 후 코드를 컴파일 한다.
– 문장의 끝에 ; 이 붙지 않는다
– #include, #define, #undef, #if ~ #endif : 5가지
• #include: 헤더파일과 같은 외부 파일을 지정하고자 하는 경우에 사
용
• #define: 매크로를 정의하기 위해서 사용하는 전처리 문으로 일종
의 상수값을 정의하고자 하는 경우에 주로 사용
• #undef: 정의되지 않은 매크로를 삭제
• #if ~ #endif: 조건부 컴파일을 위한 전처리문
Konkuk Univ. Dept. of Electronics
22
기본 예제 – cont.
– #include 문
#include <파일명>
#include “파일명”
• 디스크 상에 위치한 외부 파일을 지정하기 위한 전처리문
• <>일경우에는 컴파일러의 include 폴더에 있는 파일을 포함
• “” 일경우에는 현재 소스코드가 있는 폴더에 있는 파일을 포함하거
나 사용자가 지정한 폴더에 있는 파일을 포함
• #include <stdio.h> // include 폴더
• #include “myHeader.h” // 소스코드와 동일한 폴더
• #include “C:₩project₩myHeader.h” // 직접 경로 설정
Konkuk Univ. Dept. of Electronics
23
Header File ?
헤더 파일에 주로 들어가는
내용은 일반적으로 자신의
프로그램에서 사용할 여러
가지 자료구조의 정의, 상수
의 정의, C 파일에 있을 함수
들의 프로토타입이 들어있다.
헤더파일에는 다른 헤더를 포
함 할 수 있다.
24
기본 예제 – cont.
– #define문
• 상수값을 지정하기 위한 예약어로 매크로라고 함
#define 매크로 명칭
값
• 일반적으로 매크로 명칭은 대문자를 사용
• #define PI 3.141592
– 위 와 같이 지정하면 프로그램 작성시 PI는 숫자
3.141592에 대응된다. “2*2*PI”와 “2*2*3.141592”는
동일한 처리
• #define DATA “문자열도 사용가능”
• #define TRUE_VALUE
1
• #define FALSE_VALUE (! TRUE_VALUE)
Konkuk Univ. Dept. of Electronics
25
기본 예제 – cont.
•
사용용도
– 프로그램의 여러 곳에서 변경될
수 있는 상수를 대표하는 이름으
로 사용
– 여러 곳을 수정할 필요없이
#define문만 수정하면 된다.
– #define문의 마지막에 ‘;’을 사용
하지 않는다.
Konkuk Univ. Dept. of Electronics
26
자료형(Data Type)
•
변수
– 프로그래머가 임시 저장 장소로 사용하기 위해 만드는 것
– 변수 작성 규칙
• 항상 영문자 또는 _ 로 시작
• &, %, $, #와 같은 특수기호 사용 금지
• 한글 사용 금지
• 공백 문자 금지
• 예약어는 사용 금지
• 대문자와 소문자는 서로 다른 변수로 인식
Konkuk Univ. Dept. of Electronics
27
자료형(Data Type) – cont.
• CPU가 특정 연산을 하기 위해서는 값을 저장할 공간이 필요.
• CPU 내부의 레지스터에 저장하여 연산을 수행하거나 램에 저장
한다.
• 메모리의 낭비를 막기 위해서 저장공간을 어느정도나 사용
할 것인지 명시한 것이 자료형이며 자료형의 크기만큼 변수를 선
언하여 저장공간을 사용한다.
• 변수는 사용할 저장공간의 이름이라고 생각하면 된다.
Konkuk Univ. Dept. of Electronics
28
자료형(Data Type) – cont.
•
변수의 선언
자료형 변수명; // 경우1
자료형 변수명1, 변수명2; // 경우2
자료형 변수명 = 값; // 경우3
– 변수를 선언하는 방법은 세가지가 있음
– 경우1 : 자료형의 크기만큼 메모리 영역을 사용
• 선언만 하면 값은 쓰레기 값이 들어있다.
• 필요시 값을 저장할 수 있다.
– 경우2 : 동일한 자료형으로 여러변수를 선언
– 경우3 : 변수 선언과 동시에 값을 넣어주는 것
Konkuk Univ. Dept. of Electronics
29
자료형(Data Type) – cont.
•
자료형
– 변수에 저장할 수 있는 데이터의 유형을 결정짓는 것
– 변수를 데이터를 저장하는 그릇이라고 하면
자료형은 그릇의 크기와 종류를 결정
– 변수의 용도에 맞는 자료형을 택해서 사용해야 한다.
– 각 프로그래밍 언어마다 다양한 자료형이 있다.
– 각 운영체제마다 자료형의 크기는 다르다.
Konkuk Univ. Dept. of Electronics
30
자료형(Data Type) – cont.
• C 언어에서 제공되는 자료형
자료형(Type)
기본형
정수형
실수형
확장형
표현(Keyword)
형없음
void
문자형
char
짧은 정수형
short
표준 정수형
int
긴 정수형
long
단정도 부동 소수점 형
float
배정도 부동 소수점 형
double
열거형
enum
배열형
[]
포인터형
*
구조체형
struct
공용체형
union
Konkuk Univ. Dept. of Electronics
31
변수와 자료형
• 마이크로 프로세서와 컴파일
러마다 자료형에 대한 길이가
다르다.
– int 자료형의 길이
• Pentium PC VC++ : 32bit
• AVR GCC : 16bit
– long 자료형의 길이
• Pentium PC VC++ : 32bit
• AVR GCC : 32bit
– double 자료형의 길이
• Pentium PC VC++ : 64bit
• AVR GCC : 32bit
– 포인터 자료형의 길이
• Pentium PC VC++ : 32bit
• AVR GCC : 16bit
Konkuk Univ. Dept. of Electronics
32
변수와 자료형 - cont.
변수의 선언
- Int 자료형 변수 X를 선언했다.
- 선언된 아래에서 변수 X를 사용할 수 있다.
printf() 함수 내의 결과 대입
- %d 위치에 연산결과를 정수형으로 대입
- x + 15를 %d 위치에 대입하여 출력
- 순서대로 짝맞추어 대입
- %x : 16 진수로 대입
- %f : 소수점 있는 float 형
Konkuk Univ. Dept. of Electronics
33
배열 변수
• 이름은 동일하고 index로 배열내의 하나를 구별
int형 7개의 자료명 a로 선언
- 각각은 a[인덱스]로 구분한다.
Konkuk Univ. Dept. of Electronics
34
산술 연산자
•
•
•
•
•
+
*
/
%
:
:
:
:
:
Addition
Subtraction
Multiplication
Division
Modulus
• 연산결과는 operand 중 큰 자료형
으로 변환된다
– ex1) 5(int)/2(int) -> int
– ex2) 5.(double)/2(int) -> double
Konkuk Univ. Dept. of Electronics
35
관계 연산자(Relational Operator)
• 연산결과
– True일 때 1
– False일 때 0
Konkuk Univ. Dept. of Electronics
36
Program Flow
•
program flow or control flow
– 프로그래밍 언어에서 계산 순서를 결정하는 것
– 주로 Block 단위로 순서를 결정
– 글이나 Flow Chart를 이용해서 표현(프로그램을 작성에 있어서 설계도
의 역할)
– Block structured programming의 규칙
• 모든 block의 가장 상위 block에서 시작
• 모든 block의 가장 마지막 block에서 끝
• 컴퓨터가 하나의 block을 끝마치면 다음 block을 수행하거나 프로그램이 끝
난다.
• Branch 제어문 : if…else, switch… case
• Loop 반복문 : while, for
• break, continue, goto
Konkuk Univ. Dept. of Electronics
37
Program Flow (cont’d)
•
Block의 종류
– Sequential block(순차구조)
• Block의 가장 단순한 형태
• 문장이 순서적으로 나열
• 한 문장 수행 후 순차적으로 다음 문장 수행 (일반적 프로그램 흐름)
– Loop block(반복구조)
• 프로그램을 수행하다가 되돌아 가거나 반복되는 부분이 존재
• 일정 구간의 반복 처리
– Branch block(선택구조)
• 명령을 수행하다가 다른 sequential block을 수행해야 하는 경우
• 여러 sequential block 중에서 하나를 택하는 경우
• 조건에 따른 분기 처리
Konkuk Univ. Dept. of Electronics
38
Program Flow (cont’d)
Sequential
Loop
action
action
Branch
decision
action
action
action
action
decision
Konkuk Univ. Dept. of Electronics
39
Program Flow : (1) if…else…
•
•
•
•
조건 연산이 True이면 (a)블록을 수행
하고 False이면 (b)블록을 수행한다.
수행될 명령이 하나일 경우는 블록기호
{}를 생략할 수 있다.
True일 때만 사용하고자 할 때 else {}
는 생략할 수 있다.
조건연산이 0일 때 False로 취급하고 0
이 아닐 때 True로 취급한다.
Konkuk Univ. Dept. of Electronics
40
Program Flow : (2) switch…case
•
switch…case 문
– if 문의 복합형태와 유사한 기능을 수행
– 어떤 값에 따라 선택적으로 해당하는 실행을 해야 할 때 쓰임
switch( 식 )
{
case 값1:
문장1;
case 값2:
문장2;
……..
default:
문장n;
}
Konkuk Univ. Dept. of Electronics
41
Program Flow : (2) switch…case – cont.
• if문은 참과 거짓이라는 두 조건에 대한 분기 제공
• 3개 이상의 조건에 대해 중첩된 if나 다중 if문 사용으로 인해 프
로그램의 복잡성 증가
• 이러한 문제 해결을 위해 switch 구조 사용
• 다중 조건에 대한 분기 구조 제공
• switch case 구조
형 식
플로우차트
switch(정수식){
case label_1: 문장1;
문장2;
case label_2: 문장3;
case label_n: 문장4;
문장n;
default : 문장 n+1;
}
Konkuk Univ. Dept. of Electronics
설 명
이 switch문은 이 정수식의 결과가
case 문의 label값과 일치하는지를
평가하여 동일할 경우 해당 문장부
터 처리한다.
42
Program Flow : (3) for loop
• 조건식의 값을 평가하여 참일 경우 일정 횟수만큼 반복 실행
• 조건식이 거짓일 경우 제어 구조를 벗어남
• 표현식과 흐름도
Konkuk Univ. Dept. of Electronics
43
Program Flow : (4) while loop
• while 문
– 조건이 참인 동안 지정된 문장을 반복적으로 수행
while( 조건문 )
{
참일 때 수행할 문장;
조건문 변경문장;
}
– 조건문 변경문장이 없는 경우도 있음 (초기값과 증감치가 존
재하지 않은 구조), 이때 조건식이 참이면 무한루프를 돌게 된
다.
– while 블록 내부에서 반드시 종료 구문을 포함하여야 한다.
Konkuk Univ. Dept. of Electronics
44
Program Flow : (5) do~while loop
•
do..while 문
–
–
–
–
while 문의 다른 형태
while 문은 조건에 따라서 내용이 한번도 수행되지 않는 경우도 있다.
do while은 반드시 한번은 수행되어야 할 필요가 있을 때 사용
조건식 검사 시기가 문장 실행 후에 이루어진다.
do
{
참일 때 수행할 문장;
조건문 변경문장;
} while( 조건문 );
– while(조건식) 끝에 ;을 써야 한다.
Konkuk Univ. Dept. of Electronics
45
Program Flow : (5) do~while loop
– cont.
Konkuk Univ. Dept. of Electronics
46
Program Flow : (6) break
• break 문
– while문, do..while문, for문에서 loop를 탈출하기 위해 사용
– switch 문에서 block을 빠져나갈 때 사용
– 중첩된 loop안에서 break 문은 단지 해당 되는 하나의 블록만을 빠져 나
오므로 다중 블록을 포함하는 경우 중첩된 수 만큼의 break문 요구
– 사용 예)
Konkuk Univ. Dept. of Electronics
47
Program Flow : (6) break – cont.
• 반복문의 수행을 중지하고 블
록을 빠져나온다.
• strlen()함수 실행을 위해
#include <string.h>가 포함
되어 있다.
• strlen()함수는 문자열의 byte
길이를 정수로 알려준다.
• x++은 x 값을 1 증가
Konkuk Univ. Dept. of Electronics
48
Program Flow : (7) continue
• continue 문
– while문, do..while문, for문에서 loop를 돌다가 loop의 처음으로 이동
하기 위해 사용
– break문이 해당 블록을 빠져 나오는데 사용되는데 반해 continue문은
반복 구조에서 continue문 이후를 수행하지 않고 다음 반복을 수행한다.
– 사용 예>
Konkuk Univ. Dept. of Electronics
49
Program Flow : (7) continue – cont.
• 반복 블록구간 중 이후 명령
들을 무시하고 skip 한다.
• 반복 명령은 계속된다. 단 1
회에 한하여 continue; 이후
의 블록 구간을 건너뛴다.
Konkuk Univ. Dept. of Electronics
50
Procedure & Function
• 프로시저와 함수
– 관련된 작업을 하나로 묶어 놓은 모듈
– 사용방법 동일
– 리턴 값이 있는 경우 함수
– 리턴 값이 없는 경우 프로시저
– C언어는 특별한 구분이 없다.
– return 예약어로 리턴값을 처리
– void 예약어로 파라미터가 없는 경우와 리턴이 없는 경우 처리
Konkuk Univ. Dept. of Electronics
51
Function
•
함수는 앞에서 선언(declare) 되어야
호출할 수 있다.
•
선언된 함수는 정의(define)되어 있
어야 실행될 수 있다.
•
함수의 변환 자료형은 함수가 종료
될 때 return 되는 값의 유형이다.
•
함수간에 전달되는 파라메타 자료형
을 선언과 정의에서 표시한다.
Konkuk Univ. Dept. of Electronics
52
Function – cont.
• 함수의 정의(define)를 앞에서
하면 선언(declare) 할 필요없이
호출할 수 있다.
Konkuk Univ. Dept. of Electronics
53
Function – cont.
다른 파일에 있는 함수의 호출
•
•
extern 예약어를 사용하여 다른 파일에 int square()함수가 있음을 선언
(declare)한다.
다른 파일에서 int square() 함수를 정의(define)한다.
Konkuk Univ. Dept. of Electronics
54
변수의 유효구역(variable scope)
•
전역변수와 지역변수 사용범위
– 전역변수는 c 소스 파일 전체에 유효
– 지역변수는 선언한 블록에서 유효
•
변수의 사용범위
– 함수의 경우 각 함수의 블록 내에서만 지역변수 유효
– 이름이 동일해도 문제가 되지 않는다.
• 실제적으로 메모리 위치가 다르게 설정 되어 있다.
– 전역 변수는 모든 함수에 대해 유효하다.
– 지역변수와 전역변수가 동시에 유효할 경우 지역변수가 우선한다.
Konkuk Univ. Dept. of Electronics
55
변수의 유효구역 - cont.
•
블록 안에서 선언된 변수는 그 블록내에
서만 유효
•
동일한 변수명으로 선언된 경우는 가까
운 블록에서 선언된 변수가 유효
안쪽 블록에서 선언된 x
바깥 블록에서 선언된 x
Konkuk Univ. Dept. of Electronics
56
변수의 유효구역 - cont.
•
블록 밖에서 선언된 변수는 여러 블록에
서 유효
•
선언된 이후 사용이 가능
블록 밖에서 선언된 변수 x
선언된 이후에 사용 가능
Konkuk Univ. Dept. of Electronics
57
변수의 유효구역
– 다른 함수에서 선언된 변수의 사용
•
Extern 예약어를 이용하여 외부 파
일에 변수가 있음을 선언한 후 사
용한다.
•
실제 변수는 다른 파일에 정의되어
있다.
•
다른 파일에 있는 함수고 extern 예
약어를 이용하여 선언한 후 호출한
다.
Konkuk Univ. Dept. of Electronics
58
포인터의 정의
•
포인터(pointer) -> C 언어의 핵심
– 데이터 값의 위치를 나타내는 메모리 주소를 저장하기 위해 사용되는
특별한 변수
– 일반변수
• 특정 공간의 메모리 주소에 할당되고 변수 이름을 통해 접근
– 포인터
• 특정 공간의 메모리 주소를 저장하는 변수
• 포인터 변수를 통해 메모리 주소의 조작이 가능
Konkuk Univ. Dept. of Electronics
59
포인터의 정의 – cont.
• 포인터 변수의 선언
– 포인터 변수를 사용하기 위해 먼저 선언되어야 한다.
– 선언 방법
• [데이터 형] *[포인터 변수명];
Type *variable_name ;
– 데이터 형 : 저장된 주소가 가리키는 공간에 저장된 데이터 형
– 포인터 변수명 : 주소를 저장할 공간의 이름
Konkuk Univ. Dept. of Electronics
60
포인터의 정의 – cont.
• 사용 예 : int *px;
Konkuk Univ. Dept. of Electronics
포인터 변수의 크기는
4byte이다.
61
포인터의 정의 – cont.
•
주소 관련 연산자
– 포인터 변수의 활용
• 어떻게 값이 저장된 변수의 주소를 얻어올 수 있는가?
– 주소 연산자(&)
– 변수의 주소 값을 얻어오는 연산자
• 어떻게 포인터 변수가 가리키고 있는 주소의 실제 값을 얻어올 수 있
는가?
– 간접 지정 연산자(*)
– 포인터 변수가 가리키는 위치의 값을 얻어오는 연산자
•
포인터에서 사용되는 "*"의 의미
– 선언 시의 "*" : 변수가 포인터 변수라는 것을 알려준다.
– 활용 시의 "*" : 간접 지정 연산자의 역할 (역참조)
Konkuk Univ. Dept. of Electronics
62
포인터의 정의 – cont.
• 포인터 변수 활용 예
char c;
char *cp;
cp = &c;
• 사용되는 메모리 구조
Konkuk Univ. Dept. of Electronics
63
포인터의 정의 – cont.
Konkuk Univ. Dept. of Electronics
64
포인터와 배열의 관계
•
포인터와 배열
– 배열의 이름은 포인터 개념을 지니고 있다.
– 배열의 이름은 배열의 첫 번째 주소를 나타낸다.
– 포인터의 값에 1을 더하면 자료형의 크기만큼 증가
(즉, 다음 주소값을 가리키게 된다.)
– 배열은 메모리를 연속해서 잡으므로 포인터의 증가값을 이용하여
표현이 가능하다 .
Konkuk Univ. Dept. of Electronics
65
포인터와 배열의 관계 – cont.
• 배열에 대한 포인터 변수 할당 예
– 01 int *pArray, array[5] = {1,2,3,4,5};
– 02 pArray = array;
• 메모리 구조
Konkuk Univ. Dept. of Electronics
66
함수에 대한 포인터
int (*p)(int a, int b);
• p는 함수의 시작주소를 가질 수 있
는 포인터
– 단 반환 자료형이 int이고 파라메터
로 두 개의 int를 갖는 함수의 주소
•
함수 포인터 p의 선언
– 반환은 int형, 인수는 2개의 int형
•
•
함수 포인터 p에 함수 foo() 시작위치
대입
– 함수 foo()는 int foo(int x, int y) 로서
선언된 포인터와 동일한 함수 유형
함수 포인터로 함수의 호출
Konkuk Univ. Dept. of Electronics
67
구조체(Structure)
• 구조체
– 한가지 또는 여러 가지 기본 자료형으로 구성되어 있는 자료형으로
새로운 타입의 데이터 정의
• 배열은 한가지 자료형을 연속하여 사용
• 구조체는 여러 가지 자료형을 묶을 수 있다.
– 일반적으로 레코드 형태를 가진다.
struct tag-name
{
Data_type1 name1;
Data_type2 name2;
Data_type3 name3;
};
struct
[구조체 이름]
[데이터 타입]
[변수이름]
Konkuk Univ. Dept. of Electronics
:
:
:
:
구조체 정의 키워드
구조체의 대표명
각 요소의 타입
각 구성요소의 이름
68
구조체(Structure) – cont.
•
struct complex 자료형을 구조체
로 새롭게 탄생시켰다.
•
앞의 구조체 자료형 변수 x, y, z
를 선언하여 사용할 수 있게 했다.
•
구조체의 구성변수(member)는 .
로 지칭하여 사용한다.
•
구조체 변수를 인수와 반환값으
로 하는 함수를 사용할 수 있다.
– 구조체 크기가 커지면 비 효율적
Konkuk Univ. Dept. of Electronics
69
구조체의 포인터
•
포인터로 구조체를 사용할 때
•
구성원소는 ->로 지칭하여 사용
한다.
Konkuk Univ. Dept. of Electronics
70
typedef 문
•
자료형 표현을 바꾸어 사용
•
Int 자료형 표현을 myinteger_t로
사용
•
Struct complex 자료형을
complex_t 표현으로 사용
•
기존 표현을 사용해도 무방함
– 단, 혼돈의 여지가 있을 수 있다.
Konkuk Univ. Dept. of Electronics
71