SlideShare a Scribd company logo
1 of 12
9. 소스 파일과 프로그램




                                   아꿈사
          http://cafe.naver.com/architect1

                                     해강



        아꿈사 오전반 C++ 뽀개기 - TCPL
                     2013. 03. 02
                                     1
시작하기 전에
오늘은 내용이 쉽습니다
그래서 PT도 간략합니다 신난다

중간중간 자신의 경험담을 이야기해 봅시다




                         2
분할 컴파일
분할 컴파일을 위한 링크 관계에서 주의사항

1. 객체의 정의는 반드시 한번만 이루어져야 한다
2. 선언은 여러 번 될 수 있지만 타입이 다르면 안 된다

컴파일러는 한번에 하나의 파일만 처리하기 때문에 링크 에러처리 못함
이러한 에러는 링커가 걸러줌




                                        3
링크
외부 링크 관계 – 다른데서 가져 온 것
내부 링크 관계 – 정의된 곳에서만 이름을 사용할 수 있게 해놓은 것

인라인 함수는 내부 링크로만 – 외부는 절대 금지
상수는 기본적으로 내부 링크 – 선언하면 외부 가능

이름 없는 네임스페이스를 통해 내부 링크 관계를 만들어 줄 수 있다
그러나 이렇게 내부와 외부를 섞어쓰는건 자살행위

Static은 함수와 클래스 속에서만 사용




                                         4
헤더 파일
include 할 때의 주의사항들

표준 라이브러리 헤더는 써주지 않아도 헤더로 통함

익히 알거나 무의식적으로 이미 하는 내용…패스




                              5
단일 정의 규칙
단일 정의 규칙(ODR)
클래스, 나열자, 템플릿, 함수등 이름을 사용하는 것은 한번만

주의사항
1. 서로 다른 해석 단위에 있어야 한다
2. 토큰 단위로 비교했을 때 서로 똑같아야 한다
3. 두 해석 단위에 대해 각 토큰의 의미가 동일해야 한다



ODR은 공통으로 쓰이는 소스 파일과 다른 곳에서
클래스 정의를 포함시키기 위한 개념




                                     6
C++외 링크
C++이 아닌 C를 사용할 경우에는 extern ”C”
기존의 C 코드를 C++로 링크변환

하지만 최근에는 위와 같이 쓸 일은 없으므로 역시 패스




                                 7
헤더 파일 사용
단일 헤더 스타일
헤더 파일을 한곳에 모두 모아서 구성한다

다중 헤더 스타일
모듈별로 따로 헤더를 만들어 구성한다

조언
규모가 커질수록 다중 헤더 스타일이 관리에 좋다
main()은 가능한 간략하게
따로 구동 함수를 만드는 것이 좋다

무조건 헤더를 나누는게 좋다기보다는
단일과 다중은 서로 상호 보완
프로그램에 따른 유연한 설계 필요

가능하다면 구현자용과 사용자용 인터페이스를 구분해서 제공

                                  8
프로그램
프로그램은
정의를 가진다
main()은 하나다
main()의 리턴을 만나면 끝난다
이처럼 단순하지만 전역 변수나, 예외를 주의해야 한다

전역 변수의 초기화 문제
해결 : 전역 변수는 최소한으로 줄이자
대안 : 함수에서 참조자 반환




                                9
프로그램 종료
프로그램 종료 원인 4가지
1. main()에서 return
2. exit() 호출
3. abort() 호출
4. 예외 발생

exit는 정적으로 생성된 소멸자가 호출
abort는 소멸자 호출 단계가 무시
일반적으로는 생략된 체 호출되는 부분 자세한 내용은 10장에

C++ 표준함수인 atexit는 프로그램이 끝날 때 호출할 함수를 지정할 수 있다
그러나 함수의 개수가 제한되어 실망으로 끝나는 명령어…
소멸자가 호출되는 시점에 주의
atexit가 호출되기 전에 만들어진 객체의 소멸자는 atexit 호출된 후에 실행
atexit가 호출한 후에 만들어진 객체의 소멸자는 atexit 전에 실행


                                                 10
고수의 조언
1. 인터페이스와 논리적 구조를 나타내는 데는 헤더 파일을 사용할 것.
2. 어떤 헤더에 선언된 함수를 구현하는 소스 파일은 그 헤더를 #include 할 것.
3. 서로 다른 해석 단위에 있는 전역 개체(데이터, 함수, ...)를 정의 할 때는 똑같은 이름은 우선
적으로 피하고 비슷한 이름에 다른 뜻을 가진 것들도 피할 것.
4. 인라인함수가 아닌 함수는 헤더안에 정의하지 말자.
5. #include 가 사용될 곳은 오직 전역 유효범위와 네임스페이스 내부뿐이다.
6. #include할 헤더는 반드시 완전한 선언 및 정의를 담고 있도록 하자.
7. 인클루드 방지자를 사용할 것.
8. C 헤더를 #include 할 때 전역 네임스페이스를 침범하는 것을 피하려면 네임스페이스를 사
용하자.
9. 자체에 모든 것을 갖춘 헤더가 좋다.
10. 사용자용 인터페이스와 구현자용 인터페이스를 구분해서 만들어 두자.
11. 보통 사용자용 인터페이스와 전문 사용자용 인터페이스를 구분해서 제공하자.
12. 다른 언어로 작성된 프로그램에 섞어서 쓸 C++코드에는 런타임 초기화가 필요한 비지역
객체가 들어가지 않도록 신경 쓰자.



                                                        11
Q&A




      12

More Related Content

Similar to [아꿈사] The C++ Programming Language 9장 소스 파일과 프로그램

More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차Injae Lee
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++KyeongWon Koo
 
C Language II
C Language IIC Language II
C Language IISuho Kwon
 
디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13Shin heemin
 
Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준HoJun Sung
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표재정 이
 
C#강좌
C#강좌C#강좌
C#강좌e12g
 
프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)Devgear
 
Tcpl 12장 파생클래스
Tcpl 12장 파생클래스Tcpl 12장 파생클래스
Tcpl 12장 파생클래스재정 이
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것jaypi Ko
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
Architecture patterns with python (2)
Architecture patterns with python (2)Architecture patterns with python (2)
Architecture patterns with python (2)동환 김
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿AnselmKim
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임codenavy
 
The art of readable code ch4 ch8
The art of readable code ch4   ch8The art of readable code ch4   ch8
The art of readable code ch4 ch8Ki Sung Bae
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다wonmin lee
 
Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405Hyosang Hong
 

Similar to [아꿈사] The C++ Programming Language 9장 소스 파일과 프로그램 (20)

7 8 1
7 8 17 8 1
7 8 1
 
More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++
 
C Language II
C Language IIC Language II
C Language II
 
디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13
 
Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표
 
C#강좌
C#강좌C#강좌
C#강좌
 
프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)
 
Tcpl 12장 파생클래스
Tcpl 12장 파생클래스Tcpl 12장 파생클래스
Tcpl 12장 파생클래스
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
Architecture patterns with python (2)
Architecture patterns with python (2)Architecture patterns with python (2)
Architecture patterns with python (2)
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 
The art of readable code ch4 ch8
The art of readable code ch4   ch8The art of readable code ch4   ch8
The art of readable code ch4 ch8
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
 
Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405
 

More from 해강

[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self
[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self
[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self해강
 
[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie
[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie
[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie해강
 
[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...
[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...
[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...해강
 
[14.12.27] 종횡사해2014(DevRookie)
[14.12.27] 종횡사해2014(DevRookie)[14.12.27] 종횡사해2014(DevRookie)
[14.12.27] 종횡사해2014(DevRookie)해강
 
[14.12.08] 행렬대수(ShaderStudy)
[14.12.08] 행렬대수(ShaderStudy)[14.12.08] 행렬대수(ShaderStudy)
[14.12.08] 행렬대수(ShaderStudy)해강
 
[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)해강
 
[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)
[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)
[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)해강
 
[14.10.10] TressFX 번역(self)
[14.10.10] TressFX 번역(self)[14.10.10] TressFX 번역(self)
[14.10.10] TressFX 번역(self)해강
 
[14.09.01] dynamic lighting in god of war3(shader study)
[14.09.01] dynamic lighting in god of war3(shader study)[14.09.01] dynamic lighting in god of war3(shader study)
[14.09.01] dynamic lighting in god of war3(shader study)해강
 
[14.06.28] 이 구역의 프로그래머는 나야(devrookie - 공개용)
[14.06.28]  이 구역의 프로그래머는 나야(devrookie - 공개용)[14.06.28]  이 구역의 프로그래머는 나야(devrookie - 공개용)
[14.06.28] 이 구역의 프로그래머는 나야(devrookie - 공개용)해강
 
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)해강
 
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)해강
 
[Shader study] Color control (2014.05.12)
[Shader study] Color control (2014.05.12)[Shader study] Color control (2014.05.12)
[Shader study] Color control (2014.05.12)해강
 
[Dev rookie] Omnibus Me (2014.01.11)
[Dev rookie] Omnibus Me (2014.01.11)[Dev rookie] Omnibus Me (2014.01.11)
[Dev rookie] Omnibus Me (2014.01.11)해강
 
[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)
[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)
[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)해강
 
[Dev rookie]사망유희2013(13.12.21)
[Dev rookie]사망유희2013(13.12.21)[Dev rookie]사망유희2013(13.12.21)
[Dev rookie]사망유희2013(13.12.21)해강
 
[Dev rookie] 이상적인 게임에 관하여(13.11.30)
[Dev rookie] 이상적인 게임에 관하여(13.11.30)[Dev rookie] 이상적인 게임에 관하여(13.11.30)
[Dev rookie] 이상적인 게임에 관하여(13.11.30)해강
 
[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)해강
 
[Softmax] 유익한 무엇에 관하여(13.09.27)
[Softmax] 유익한 무엇에 관하여(13.09.27)[Softmax] 유익한 무엇에 관하여(13.09.27)
[Softmax] 유익한 무엇에 관하여(13.09.27)해강
 
[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)
[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)
[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)해강
 

More from 해강 (20)

[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self
[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self
[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self
 
[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie
[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie
[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie
 
[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...
[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...
[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...
 
[14.12.27] 종횡사해2014(DevRookie)
[14.12.27] 종횡사해2014(DevRookie)[14.12.27] 종횡사해2014(DevRookie)
[14.12.27] 종횡사해2014(DevRookie)
 
[14.12.08] 행렬대수(ShaderStudy)
[14.12.08] 행렬대수(ShaderStudy)[14.12.08] 행렬대수(ShaderStudy)
[14.12.08] 행렬대수(ShaderStudy)
 
[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)
 
[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)
[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)
[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)
 
[14.10.10] TressFX 번역(self)
[14.10.10] TressFX 번역(self)[14.10.10] TressFX 번역(self)
[14.10.10] TressFX 번역(self)
 
[14.09.01] dynamic lighting in god of war3(shader study)
[14.09.01] dynamic lighting in god of war3(shader study)[14.09.01] dynamic lighting in god of war3(shader study)
[14.09.01] dynamic lighting in god of war3(shader study)
 
[14.06.28] 이 구역의 프로그래머는 나야(devrookie - 공개용)
[14.06.28]  이 구역의 프로그래머는 나야(devrookie - 공개용)[14.06.28]  이 구역의 프로그래머는 나야(devrookie - 공개용)
[14.06.28] 이 구역의 프로그래머는 나야(devrookie - 공개용)
 
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
 
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
 
[Shader study] Color control (2014.05.12)
[Shader study] Color control (2014.05.12)[Shader study] Color control (2014.05.12)
[Shader study] Color control (2014.05.12)
 
[Dev rookie] Omnibus Me (2014.01.11)
[Dev rookie] Omnibus Me (2014.01.11)[Dev rookie] Omnibus Me (2014.01.11)
[Dev rookie] Omnibus Me (2014.01.11)
 
[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)
[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)
[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)
 
[Dev rookie]사망유희2013(13.12.21)
[Dev rookie]사망유희2013(13.12.21)[Dev rookie]사망유희2013(13.12.21)
[Dev rookie]사망유희2013(13.12.21)
 
[Dev rookie] 이상적인 게임에 관하여(13.11.30)
[Dev rookie] 이상적인 게임에 관하여(13.11.30)[Dev rookie] 이상적인 게임에 관하여(13.11.30)
[Dev rookie] 이상적인 게임에 관하여(13.11.30)
 
[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)
 
[Softmax] 유익한 무엇에 관하여(13.09.27)
[Softmax] 유익한 무엇에 관하여(13.09.27)[Softmax] 유익한 무엇에 관하여(13.09.27)
[Softmax] 유익한 무엇에 관하여(13.09.27)
 
[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)
[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)
[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)
 

[아꿈사] The C++ Programming Language 9장 소스 파일과 프로그램

  • 1. 9. 소스 파일과 프로그램 아꿈사 http://cafe.naver.com/architect1 해강 아꿈사 오전반 C++ 뽀개기 - TCPL 2013. 03. 02 1
  • 2. 시작하기 전에 오늘은 내용이 쉽습니다 그래서 PT도 간략합니다 신난다 중간중간 자신의 경험담을 이야기해 봅시다 2
  • 3. 분할 컴파일 분할 컴파일을 위한 링크 관계에서 주의사항 1. 객체의 정의는 반드시 한번만 이루어져야 한다 2. 선언은 여러 번 될 수 있지만 타입이 다르면 안 된다 컴파일러는 한번에 하나의 파일만 처리하기 때문에 링크 에러처리 못함 이러한 에러는 링커가 걸러줌 3
  • 4. 링크 외부 링크 관계 – 다른데서 가져 온 것 내부 링크 관계 – 정의된 곳에서만 이름을 사용할 수 있게 해놓은 것 인라인 함수는 내부 링크로만 – 외부는 절대 금지 상수는 기본적으로 내부 링크 – 선언하면 외부 가능 이름 없는 네임스페이스를 통해 내부 링크 관계를 만들어 줄 수 있다 그러나 이렇게 내부와 외부를 섞어쓰는건 자살행위 Static은 함수와 클래스 속에서만 사용 4
  • 5. 헤더 파일 include 할 때의 주의사항들 표준 라이브러리 헤더는 써주지 않아도 헤더로 통함 익히 알거나 무의식적으로 이미 하는 내용…패스 5
  • 6. 단일 정의 규칙 단일 정의 규칙(ODR) 클래스, 나열자, 템플릿, 함수등 이름을 사용하는 것은 한번만 주의사항 1. 서로 다른 해석 단위에 있어야 한다 2. 토큰 단위로 비교했을 때 서로 똑같아야 한다 3. 두 해석 단위에 대해 각 토큰의 의미가 동일해야 한다 ODR은 공통으로 쓰이는 소스 파일과 다른 곳에서 클래스 정의를 포함시키기 위한 개념 6
  • 7. C++외 링크 C++이 아닌 C를 사용할 경우에는 extern ”C” 기존의 C 코드를 C++로 링크변환 하지만 최근에는 위와 같이 쓸 일은 없으므로 역시 패스 7
  • 8. 헤더 파일 사용 단일 헤더 스타일 헤더 파일을 한곳에 모두 모아서 구성한다 다중 헤더 스타일 모듈별로 따로 헤더를 만들어 구성한다 조언 규모가 커질수록 다중 헤더 스타일이 관리에 좋다 main()은 가능한 간략하게 따로 구동 함수를 만드는 것이 좋다 무조건 헤더를 나누는게 좋다기보다는 단일과 다중은 서로 상호 보완 프로그램에 따른 유연한 설계 필요 가능하다면 구현자용과 사용자용 인터페이스를 구분해서 제공 8
  • 9. 프로그램 프로그램은 정의를 가진다 main()은 하나다 main()의 리턴을 만나면 끝난다 이처럼 단순하지만 전역 변수나, 예외를 주의해야 한다 전역 변수의 초기화 문제 해결 : 전역 변수는 최소한으로 줄이자 대안 : 함수에서 참조자 반환 9
  • 10. 프로그램 종료 프로그램 종료 원인 4가지 1. main()에서 return 2. exit() 호출 3. abort() 호출 4. 예외 발생 exit는 정적으로 생성된 소멸자가 호출 abort는 소멸자 호출 단계가 무시 일반적으로는 생략된 체 호출되는 부분 자세한 내용은 10장에 C++ 표준함수인 atexit는 프로그램이 끝날 때 호출할 함수를 지정할 수 있다 그러나 함수의 개수가 제한되어 실망으로 끝나는 명령어… 소멸자가 호출되는 시점에 주의 atexit가 호출되기 전에 만들어진 객체의 소멸자는 atexit 호출된 후에 실행 atexit가 호출한 후에 만들어진 객체의 소멸자는 atexit 전에 실행 10
  • 11. 고수의 조언 1. 인터페이스와 논리적 구조를 나타내는 데는 헤더 파일을 사용할 것. 2. 어떤 헤더에 선언된 함수를 구현하는 소스 파일은 그 헤더를 #include 할 것. 3. 서로 다른 해석 단위에 있는 전역 개체(데이터, 함수, ...)를 정의 할 때는 똑같은 이름은 우선 적으로 피하고 비슷한 이름에 다른 뜻을 가진 것들도 피할 것. 4. 인라인함수가 아닌 함수는 헤더안에 정의하지 말자. 5. #include 가 사용될 곳은 오직 전역 유효범위와 네임스페이스 내부뿐이다. 6. #include할 헤더는 반드시 완전한 선언 및 정의를 담고 있도록 하자. 7. 인클루드 방지자를 사용할 것. 8. C 헤더를 #include 할 때 전역 네임스페이스를 침범하는 것을 피하려면 네임스페이스를 사 용하자. 9. 자체에 모든 것을 갖춘 헤더가 좋다. 10. 사용자용 인터페이스와 구현자용 인터페이스를 구분해서 만들어 두자. 11. 보통 사용자용 인터페이스와 전문 사용자용 인터페이스를 구분해서 제공하자. 12. 다른 언어로 작성된 프로그램에 섞어서 쓸 C++코드에는 런타임 초기화가 필요한 비지역 객체가 들어가지 않도록 신경 쓰자. 11
  • 12. Q&A 12