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
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