차 례 차 례 차 례 차 례 (A g e n d a ) (A g e n d a ) (A g e n d a ) (A g e n d a )
분할컴파일 기억존속시간 사용범위 링크 위치지정new 이름공간
분 할 분 할 분 할 분 할 컴 파 일 컴 파 일 컴 파 일 컴 파 일
Unix의경우, make (Windows에서도가능) 전체프로그램을분할한다.
–분할을위한좋은방법은아무도모른다 –OOP에서는클래스로만들어나간다 함수들을분할하고, 공통으로필요한부분은 헤더로넣는다 실행파일의메모리에들어가야하는것은헤 더에넣을수없다. 따라서, global.c와같은 파일이필요하다
M a ke M a ke M a ke M a ke
Unix
–
make, gmake Windows
–
make, nmake(VC 디렉토리에 있음), gmake Java는?
–
Ant SE 충고
–
일일빌드! 코드공유및관리도구
–
CVS, VSS, SVN
헤 더 에 헤 더 에 헤 더 에 헤 더 에 들 어 가 는 들 어 가 는 들 어 가 는 들 어 가 는 것 들 것 들 것 들 것 들
함수프로토타입 #define, const를이용해정의된상수 구조체선언 클래스선언 템플릿선언 인라인함수 함수정의나변수선언은들어가선안된다
# in c lu d e # in c lu d e # in c lu d e # in c lu d e 헤 더 에 는 헤 더 에 는 헤 더 에 는 헤 더 에 는 if n d e f if n d e f if n d e f if n d e f 를를를를 활 용 활 용 활 용 활 용
언제나바보같은상황에서헤더를중복하여 include 할수있는위험성이존재한다 이를방어하기위해#ifndef, #define, #endif로include 하는코드를감싸야한다
기 억 기 억 기 억 기 억 존 속 존 속 존 속 존 속 시 간 시 간 시 간 시 간
특정변수나객체는얼마나오래메모리에머 무는가? 자동(오토), 정적(스태틱), 동적(다이내믹) 자동
–
자동, 레지스터
–
블록이나함수와생 성/사멸을같이함 정적
–
외부링크, 내부링크, 링크없음
–
일단 생기면, 프로그램끝날때까지 동적
–
new/delete로알아서생성/사멸
정 적 변 수 정 적 변 수 정 적 변 수 정 적 변 수
프로그램이실행되는전체시간동안존속 이미0이나NULL로초기화되어있음 외부링크
–
전역변수 내부링크
–
전역변수앞에static 링크없음
–
자동변수앞에static
제 한 자 제 한 자 제 한 자 제 한 자 (5 2 3 (5 2 3 (5 2 3 (5 2 3 쪽쪽쪽쪽 ))))
기억공간제한자
–auto, register, static, extern, mutable cv제한자
–const , volatile 기억공간: const 는#define 처럼행동한다
함 수 함 수 함 수 함 수 링 크 링 크 링 크 링 크 / / / / 언 어 언 어 언 어 언 어 링 크 링 크 링 크 링 크
하나의함수안에서다른함수정의안됨 정적기억존속시간 외부링크–
static 으로내부링크부여가능 단일정의규칙 inline도#define 처럼행동 이름장식 –“C”-_spiff, _printf, _scanf
–“C++”-spiff_d_d@v(이름장식)
Calling Convention –__cdecl, __stdcall, __fastcall
–옛날꺼–__pascal, __fortran, __syscall
위 치 위 치 위 치 위 치 지 정 지 정 지 정 지 정 n e w n e w n e w n e w
이미할당된기억공간을같이사용하는방식 예를들어
char buffer[100]; double* pd = new (buffer) double[10]; #include <new> 필요 delete를하면안됨
이 름 이 름 이 름 이 름 공 간 공 간 공 간 공 간 (5 3 6 (5 3 6 (5 3 6 (5 3 6 쪽쪽쪽쪽 ))))
과거의C++ 이름공간(534쪽)
–선언영역, 잠재사용범위, 사용범위 전역위치에놓이며중첩가능(543쪽) 외부링크 전역이름공간
–
전역변수 항상열려있다
–
새로추가가능 이름공간제한자
–
:: (qualified name)