SlideShare a Scribd company logo
최원빈 (bindon@korea.ac.kr)
고려대학교
2017. 04. 03.
C 프로그래밍 이론 및 실습
2
 작성된 Source Code를 Compile하여 Object File
을 얻고, Linking 하여 Executable File을 얻음
프로그램의 완성 과정
3
 IDA 6.8 – Disassembler, Debugger
 기계어 -> 어셈블리언어
 IDA의 Hexray Plugin의 경우
어셈블리언어 -> 소스코드 변환 기능
(x86, x64, arm 지원)
 상용 프로그램
 IDA를 통한 .obj, .exe 파일 확인
프로그램의 완성 과정 (disassemble)
4
 Source File + Header File을 이용하여 Compile
을 수행하면 Object File이 생성
프로그램의 완성 과정
5
 .obj
프로그램의 완성 과정 (disassemble)
6
 Object File에 Linking을 수행하면 Executable
File이 생성
프로그램의 완성 과정
7
 .exe
프로그램의 완성 과정 (disassemble)
8
 Visual Studio에서의 컴파일 과정 확인
프로그램의 완성 과정
HelloWorld.c
9
 Visual Studio에서의 컴파일 과정 확인
프로그램의 완성 과정
10
 Visual Studio에서의 컴파일 과정 확인
프로그램의 완성 과정
11
 Visual Studio에서의 컴파일 과정 확인
프로그램의 완성 과정
12
 Visual Studio에서의 컴파일 과정 확인
프로그램의 완성 과정
13
정적 라이브러리 vs 동적 라이브러리
 정적 라이브러리 (.lib)
 장점
1. 프로그램에서 사용하는 ‘모든 라이브러리의 코드’가 프
로그램에 합쳐져 있기 때문에 프로세스 실행 도중 라이
브러리 코드를 실행할 때 .dll에 비해 속도가 빠르다.
2. ‘다른 표준 라이브러리 버전을 가진 컴퓨터’에서 프로
그램을 실행하더라도 ‘이미 표준 라이브러리의 코드가
프로그램에 포함’ 되어 있기 때문에 동작이 가능하다.
 단점
 프로그램의 크기가 ‘사용하는 라이브러리의 크기 + 프
로그램 소스코드’ 으로 커진다.
 크기가 큰 만큼 메모리에 적재 시 많은 크기를 차지한
다.
14
정적 라이브러리 vs 동적 라이브러리
 동적 라이브러리 (.dll)
 장점 : 프로세스와 함께 메모리(RAM)에 적재되지
않고, 프로세스에서 사용할 때만 메모리에 적재되
기 때문에 메모리 공간을 절약 할 수 있음
15
정적 라이브러리 vs 동적 라이브러리
위 소스를 정적, 동적 라이브러리 방식으로 컴파일
 test_Dynamic_Library : 동적 라이브러리를 사용하도록 빌드된 파일
 test_Static_Library : 정적 라이브러리를 사용하도록 빌드된 파일
16
 필요에 따라 메모리에 로드 하는 동적 라이브러리
 Visual Studio에서 DLL 프로젝트 작성
동적 라이브러리
DLL을 연결하여 내부 함수를
실행하는 프로젝트
DLL을 생성하는 프로젝트
17
 필요에 따라 메모리에 로드 하는 동적 라이브러리
 Visual Studio에서 DLL 프로젝트 작성
동적 라이브러리
TestC.h
TestC.cpp
18
 필요에 따라 메모리에 로드 하는 동적 라이브러리
 Visual Studio에서 DLL 프로젝트 작성
동적 라이브러리
Calculator.h
Calculator.cpp
19
 필요에 따라 메모리에 로드 하는 동적 라이브러리
 동일 솔루션에 포함 시 종속성 설정 기능 사용
동적 라이브러리
20
 빌드 결과
동적 라이브러리
21
 실제 필요한 파일과 용량
 *.exe 및 *.dll 파일
동적 라이브러리
22
 빌드 시 전부를 포함하는 라이브러리
 Visual Studio에서 정적 라이브러리 프로젝트
작성
정적 라이브러리
Lib을 포함하여 내부 함수를
실행하는 프로젝트
Lib를 생성하는 프로젝트
23
 빌드 시 전부를 포함하는 라이브러리
 Visual Studio에서 정적 라이브러리 프로젝트
작성
정적 라이브러리
TestC.h
TestC.cpp
24
 빌드 시 전부를 포함하는 라이브러리
 Visual Studio에서 정적 라이브러리 프로젝트
작성
정적 라이브러리
Calculator.h
Calculator.cpp
25
 빌드 시 전부를 포함하는 라이브러리
 동일 솔루션에 포함 시 종속성 설정 기능 사용
정적 라이브러리
26
 빌드 결과
정적 라이브러리
27
 실제 필요한 파일과 용량
 *.exe 파일
정적 라이브러리
28
컴파일러 vs 인터프리터
 컴파일러
 프로그램 전체 번역
 장점 : 한 번 번역하면 빠른 시간 내에 전체를 실행 가
능
 단점 : 프로그램의 일부를 수정하는 경우에는 전체를
다시 빌드 해야 함
 결과물 : 목적 언어로 된 프로그램!
 적용 언어 : FORTRAN, PASCAL, COBOL, ADA,
C
29
컴파일러 vs 인터프리터
 인터프리터
 실행되는 행 단위로 번역
 장점 : 큰 기억장치가 필요하지 않으며 번역 과정이 비
교적 간단함
 단점 : 실행할 때마다 매번 인터프리터로 번역
 결과물 : 실행의 결과만!
 적용 언어 : Prolog, Snobol4, Lisp, Basic,
Python
30
 주석이란?
 프로그래머에게 메모(memo)의 기능을 부여
 컴파일러는 주석을 없는 것으로 간주
 주석을 삽입 함으로 인해 프로그램의 가독성 증가
(소스코드에 설명이 있어야 가독성이 좋아진다)
 주석은 내가 보라고 넣는 것이 아니라 내 코드를 다른 사람이 보
라고 적는 것
 주석의 종류
 블록 단위 주석 : /* 내용 */
 행 단위 주석 : // 내용
 주석은 어떻게 달아야 할까?
 다른 사람이 내가 작성한 소스 코드를 이해하기 쉽게
-> ‘이해하기 쉽게’ 라는 말이 정확히 어떤 의미일까?
 개발자들끼리 coding convention을 정함 (표준은 없음)
예) MS에서 만든 MS C++ Coding Convention이 있음
주석
31
주석
• 출력 결과는?
32
 주석 처리 시 주의점
 주석을 나타내는 기호는 중복될 수 없다.
/* 주석의 시작, 여러 행에 걸쳐서
/* 단일 행 주석 처리 */
/*
 단, 단일 행 주석은 중복 가능하다.
/* 주석의 시작, 여러 행에 걸쳐서
// 단일 행 주석 처리
*/
주석
33
주석
34
Thank you

More Related Content

What's hot

Dev team chronicles
Dev team chroniclesDev team chronicles
Dev team chronicles
Kenu, GwangNam Heo
 
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
NAVER Engineering
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발Jinuk Kim
 
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
NAVER Engineering
 
윤정식 포트폴리오
윤정식 포트폴리오윤정식 포트폴리오
윤정식 포트폴리오
정식 윤
 
클린코드 9, 10장
클린코드 9, 10장클린코드 9, 10장
클린코드 9, 10장
진화 손
 
[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)
NAVER D2
 
개알못의 오픈소스이야기 - 이상준님
개알못의 오픈소스이야기 - 이상준님개알못의 오픈소스이야기 - 이상준님
개알못의 오픈소스이야기 - 이상준님
NAVER D2
 
Rapid Development
Rapid DevelopmentRapid Development
Rapid Development기룡 남
 
Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신
Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신
Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신
명신 김
 
2018 03-05-robot framework
2018 03-05-robot framework2018 03-05-robot framework
2018 03-05-robot framework
yacc01
 
오픈소스 읽기 프로젝트
오픈소스 읽기 프로젝트오픈소스 읽기 프로젝트
오픈소스 읽기 프로젝트
JiwonH
 
Understanding open api service 엄준일
Understanding open api service 엄준일Understanding open api service 엄준일
Understanding open api service 엄준일
준일 엄
 
[Osxdev]2.개선된 interface builder
[Osxdev]2.개선된 interface builder[Osxdev]2.개선된 interface builder
[Osxdev]2.개선된 interface builder
NAVER D2
 
Git 꿀팁
Git 꿀팁Git 꿀팁
Git 꿀팁
진수 허
 
11 1 while반복문
11 1 while반복문11 1 while반복문
11 1 while반복문
Changwon National University
 
Hoivs lite 개발환경
Hoivs lite 개발환경Hoivs lite 개발환경
Hoivs lite 개발환경
Sang Yun Kim
 
gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기
Manjong Han
 
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체
Mickey SJ Lee
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
KwangSeob Jeong
 

What's hot (20)

Dev team chronicles
Dev team chroniclesDev team chronicles
Dev team chronicles
 
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
 
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
 
윤정식 포트폴리오
윤정식 포트폴리오윤정식 포트폴리오
윤정식 포트폴리오
 
클린코드 9, 10장
클린코드 9, 10장클린코드 9, 10장
클린코드 9, 10장
 
[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)
 
개알못의 오픈소스이야기 - 이상준님
개알못의 오픈소스이야기 - 이상준님개알못의 오픈소스이야기 - 이상준님
개알못의 오픈소스이야기 - 이상준님
 
Rapid Development
Rapid DevelopmentRapid Development
Rapid Development
 
Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신
Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신
Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신
 
2018 03-05-robot framework
2018 03-05-robot framework2018 03-05-robot framework
2018 03-05-robot framework
 
오픈소스 읽기 프로젝트
오픈소스 읽기 프로젝트오픈소스 읽기 프로젝트
오픈소스 읽기 프로젝트
 
Understanding open api service 엄준일
Understanding open api service 엄준일Understanding open api service 엄준일
Understanding open api service 엄준일
 
[Osxdev]2.개선된 interface builder
[Osxdev]2.개선된 interface builder[Osxdev]2.개선된 interface builder
[Osxdev]2.개선된 interface builder
 
Git 꿀팁
Git 꿀팁Git 꿀팁
Git 꿀팁
 
11 1 while반복문
11 1 while반복문11 1 while반복문
11 1 while반복문
 
Hoivs lite 개발환경
Hoivs lite 개발환경Hoivs lite 개발환경
Hoivs lite 개발환경
 
gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기
 
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 

Similar to [170403 2주차]C언어 A반

프로젝트 아나키로 Rpg 만들기 프로그래밍
프로젝트 아나키로 Rpg 만들기 프로그래밍프로젝트 아나키로 Rpg 만들기 프로그래밍
프로젝트 아나키로 Rpg 만들기 프로그래밍
Alex Kang
 
강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계
chcbaram
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술
중선 곽
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellij
Sewon Ann
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
Jaehoon Choi
 
System+os study 4
System+os study 4System+os study 4
System+os study 4
Jinkyoung Kim
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
Sewon Ann
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf
ssuserb942d2
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
Chris Ohk
 
안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기
DongHwan Yu
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
Dong Chan Shin
 
컴파일러 Ch01
컴파일러 Ch01컴파일러 Ch01
컴파일러 Ch01
Hankyo
 
LetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptxLetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptx
ssuser2601f7
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
복연 이
 
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
정민 안
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
Donghyun Seo
 
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규ChangKyu Song
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
Chanwoong Kim
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
Sangmin Yoon
 

Similar to [170403 2주차]C언어 A반 (20)

프로젝트 아나키로 Rpg 만들기 프로그래밍
프로젝트 아나키로 Rpg 만들기 프로그래밍프로젝트 아나키로 Rpg 만들기 프로그래밍
프로젝트 아나키로 Rpg 만들기 프로그래밍
 
강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellij
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 
System+os study 4
System+os study 4System+os study 4
System+os study 4
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
 
Ninja
NinjaNinja
Ninja
 
컴파일러 Ch01
컴파일러 Ch01컴파일러 Ch01
컴파일러 Ch01
 
LetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptxLetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptx
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 

More from arundine

Cryptol 수업자료
Cryptol 수업자료Cryptol 수업자료
Cryptol 수업자료
arundine
 
[170605 7주차]C언어 A반
[170605 7주차]C언어 A반[170605 7주차]C언어 A반
[170605 7주차]C언어 A반
arundine
 
[170529 6주차]C언어 A반
[170529 6주차]C언어 A반[170529 6주차]C언어 A반
[170529 6주차]C언어 A반
arundine
 
[170517 5주차]C언어 A반
[170517 5주차]C언어 A반[170517 5주차]C언어 A반
[170517 5주차]C언어 A반
arundine
 
[170510 4주차]C언어 A반
[170510 4주차]C언어 A반[170510 4주차]C언어 A반
[170510 4주차]C언어 A반
arundine
 
[170410 3주차]C언어 A반
[170410 3주차]C언어 A반[170410 3주차]C언어 A반
[170410 3주차]C언어 A반
arundine
 
[170327 1주차]C언어 A반
[170327 1주차]C언어 A반[170327 1주차]C언어 A반
[170327 1주차]C언어 A반
arundine
 

More from arundine (7)

Cryptol 수업자료
Cryptol 수업자료Cryptol 수업자료
Cryptol 수업자료
 
[170605 7주차]C언어 A반
[170605 7주차]C언어 A반[170605 7주차]C언어 A반
[170605 7주차]C언어 A반
 
[170529 6주차]C언어 A반
[170529 6주차]C언어 A반[170529 6주차]C언어 A반
[170529 6주차]C언어 A반
 
[170517 5주차]C언어 A반
[170517 5주차]C언어 A반[170517 5주차]C언어 A반
[170517 5주차]C언어 A반
 
[170510 4주차]C언어 A반
[170510 4주차]C언어 A반[170510 4주차]C언어 A반
[170510 4주차]C언어 A반
 
[170410 3주차]C언어 A반
[170410 3주차]C언어 A반[170410 3주차]C언어 A반
[170410 3주차]C언어 A반
 
[170327 1주차]C언어 A반
[170327 1주차]C언어 A반[170327 1주차]C언어 A반
[170327 1주차]C언어 A반
 

[170403 2주차]C언어 A반

  • 1. 최원빈 (bindon@korea.ac.kr) 고려대학교 2017. 04. 03. C 프로그래밍 이론 및 실습
  • 2. 2  작성된 Source Code를 Compile하여 Object File 을 얻고, Linking 하여 Executable File을 얻음 프로그램의 완성 과정
  • 3. 3  IDA 6.8 – Disassembler, Debugger  기계어 -> 어셈블리언어  IDA의 Hexray Plugin의 경우 어셈블리언어 -> 소스코드 변환 기능 (x86, x64, arm 지원)  상용 프로그램  IDA를 통한 .obj, .exe 파일 확인 프로그램의 완성 과정 (disassemble)
  • 4. 4  Source File + Header File을 이용하여 Compile 을 수행하면 Object File이 생성 프로그램의 완성 과정
  • 5. 5  .obj 프로그램의 완성 과정 (disassemble)
  • 6. 6  Object File에 Linking을 수행하면 Executable File이 생성 프로그램의 완성 과정
  • 7. 7  .exe 프로그램의 완성 과정 (disassemble)
  • 8. 8  Visual Studio에서의 컴파일 과정 확인 프로그램의 완성 과정 HelloWorld.c
  • 9. 9  Visual Studio에서의 컴파일 과정 확인 프로그램의 완성 과정
  • 10. 10  Visual Studio에서의 컴파일 과정 확인 프로그램의 완성 과정
  • 11. 11  Visual Studio에서의 컴파일 과정 확인 프로그램의 완성 과정
  • 12. 12  Visual Studio에서의 컴파일 과정 확인 프로그램의 완성 과정
  • 13. 13 정적 라이브러리 vs 동적 라이브러리  정적 라이브러리 (.lib)  장점 1. 프로그램에서 사용하는 ‘모든 라이브러리의 코드’가 프 로그램에 합쳐져 있기 때문에 프로세스 실행 도중 라이 브러리 코드를 실행할 때 .dll에 비해 속도가 빠르다. 2. ‘다른 표준 라이브러리 버전을 가진 컴퓨터’에서 프로 그램을 실행하더라도 ‘이미 표준 라이브러리의 코드가 프로그램에 포함’ 되어 있기 때문에 동작이 가능하다.  단점  프로그램의 크기가 ‘사용하는 라이브러리의 크기 + 프 로그램 소스코드’ 으로 커진다.  크기가 큰 만큼 메모리에 적재 시 많은 크기를 차지한 다.
  • 14. 14 정적 라이브러리 vs 동적 라이브러리  동적 라이브러리 (.dll)  장점 : 프로세스와 함께 메모리(RAM)에 적재되지 않고, 프로세스에서 사용할 때만 메모리에 적재되 기 때문에 메모리 공간을 절약 할 수 있음
  • 15. 15 정적 라이브러리 vs 동적 라이브러리 위 소스를 정적, 동적 라이브러리 방식으로 컴파일  test_Dynamic_Library : 동적 라이브러리를 사용하도록 빌드된 파일  test_Static_Library : 정적 라이브러리를 사용하도록 빌드된 파일
  • 16. 16  필요에 따라 메모리에 로드 하는 동적 라이브러리  Visual Studio에서 DLL 프로젝트 작성 동적 라이브러리 DLL을 연결하여 내부 함수를 실행하는 프로젝트 DLL을 생성하는 프로젝트
  • 17. 17  필요에 따라 메모리에 로드 하는 동적 라이브러리  Visual Studio에서 DLL 프로젝트 작성 동적 라이브러리 TestC.h TestC.cpp
  • 18. 18  필요에 따라 메모리에 로드 하는 동적 라이브러리  Visual Studio에서 DLL 프로젝트 작성 동적 라이브러리 Calculator.h Calculator.cpp
  • 19. 19  필요에 따라 메모리에 로드 하는 동적 라이브러리  동일 솔루션에 포함 시 종속성 설정 기능 사용 동적 라이브러리
  • 20. 20  빌드 결과 동적 라이브러리
  • 21. 21  실제 필요한 파일과 용량  *.exe 및 *.dll 파일 동적 라이브러리
  • 22. 22  빌드 시 전부를 포함하는 라이브러리  Visual Studio에서 정적 라이브러리 프로젝트 작성 정적 라이브러리 Lib을 포함하여 내부 함수를 실행하는 프로젝트 Lib를 생성하는 프로젝트
  • 23. 23  빌드 시 전부를 포함하는 라이브러리  Visual Studio에서 정적 라이브러리 프로젝트 작성 정적 라이브러리 TestC.h TestC.cpp
  • 24. 24  빌드 시 전부를 포함하는 라이브러리  Visual Studio에서 정적 라이브러리 프로젝트 작성 정적 라이브러리 Calculator.h Calculator.cpp
  • 25. 25  빌드 시 전부를 포함하는 라이브러리  동일 솔루션에 포함 시 종속성 설정 기능 사용 정적 라이브러리
  • 26. 26  빌드 결과 정적 라이브러리
  • 27. 27  실제 필요한 파일과 용량  *.exe 파일 정적 라이브러리
  • 28. 28 컴파일러 vs 인터프리터  컴파일러  프로그램 전체 번역  장점 : 한 번 번역하면 빠른 시간 내에 전체를 실행 가 능  단점 : 프로그램의 일부를 수정하는 경우에는 전체를 다시 빌드 해야 함  결과물 : 목적 언어로 된 프로그램!  적용 언어 : FORTRAN, PASCAL, COBOL, ADA, C
  • 29. 29 컴파일러 vs 인터프리터  인터프리터  실행되는 행 단위로 번역  장점 : 큰 기억장치가 필요하지 않으며 번역 과정이 비 교적 간단함  단점 : 실행할 때마다 매번 인터프리터로 번역  결과물 : 실행의 결과만!  적용 언어 : Prolog, Snobol4, Lisp, Basic, Python
  • 30. 30  주석이란?  프로그래머에게 메모(memo)의 기능을 부여  컴파일러는 주석을 없는 것으로 간주  주석을 삽입 함으로 인해 프로그램의 가독성 증가 (소스코드에 설명이 있어야 가독성이 좋아진다)  주석은 내가 보라고 넣는 것이 아니라 내 코드를 다른 사람이 보 라고 적는 것  주석의 종류  블록 단위 주석 : /* 내용 */  행 단위 주석 : // 내용  주석은 어떻게 달아야 할까?  다른 사람이 내가 작성한 소스 코드를 이해하기 쉽게 -> ‘이해하기 쉽게’ 라는 말이 정확히 어떤 의미일까?  개발자들끼리 coding convention을 정함 (표준은 없음) 예) MS에서 만든 MS C++ Coding Convention이 있음 주석
  • 32. 32  주석 처리 시 주의점  주석을 나타내는 기호는 중복될 수 없다. /* 주석의 시작, 여러 행에 걸쳐서 /* 단일 행 주석 처리 */ /*  단, 단일 행 주석은 중복 가능하다. /* 주석의 시작, 여러 행에 걸쳐서 // 단일 행 주석 처리 */ 주석