12장. 고급 프로그래밍
프로그램 할당 메모리
1. 텍스트
2. 데이터
3. 힙
4. 스택
헤더 파일
정적 외부 변수
정적 외부 함수
추상 자료형
가변 인자 함수
진단 코드
1. #error
2. assert()
3. _Static_assert()
자기 참조 구조체
플랙시블 배열 멤버
신호
헤더 파일
프로그램 순서
1. os
2. 디스크
3. 메모리
4. main()
메모리 배치
1. 텍스트
2. 데이터
3. 힙
4. 스택
텍스트 영역 text
PC 레지스터
데이터 영역 data
BSS
힙 영역 heap
스택 영역 stack
스택과 힙
여러 소스 코드를 합쳐서 컴파일
1. 동시에 컴파일
2. 각자 목적 파일을 생성 후 컴파일 gcc -c 사용
사용자 헤더 파일
표준 헤더 파일과 #ifndef
외부 변수
extern
정적 외부 변수
static
정적 외부 함수
추상 자료형 ADT Abstract Data Type
스택 Stack
톱 top
함수 프레임
스택 연산자
1. push
2. pop
3. top
4. empty
5. full
6. reset
스택 구현
스택 초기화 void reset(stack *st)
스택 추가 void push(stack *st, int data)
스택의 top 보여주고 삭제 int top(stack *st)
스택의 top 보여주기 int top(stack *st)
스택이 비어있는지 확인 bool empty(const stack *st)
스택이 다 차 있는지 확인 bool full(const stack *st)
가변 인자 함수
<stdarg.h>
1. va_start(ap, v)
2. va_arg(ap, type)
3. va_copy(dest, src)
4. va_end(ap)
가변 인자 함수 주의점
va_list형 변수
미리 정의된 매크로
1. __DATE__
2. __TIME__
3. __FILE__
4. __LINE__
5. __STDC__
6. __STDC_HOSTED__
7. __STDC_VERSION__
8. __func__
__DATE__
__TIME__
__FILE__
__LINE__
__STDC__
__STDC_HOSTED__
__STDC_VERSION__
__func__
\
콤마 연산자 ,
printf()와 콤마 연산자 ,
긴 매크로 정의하기
진단 코드
#error
assert()
core dumped
NDEBUG 매크로
_Static_assert()
<assert.h>와 _Static_assert()
자기 참조 구조체
자기 참조 구조체와 동적 메모리 할당
가비지 gabage
자기 참조 구조체와 추상 자료형
스택 (자기 참조 구조체)
1. push
2. pop
3. top
4. empty
5. reset
스택 추가 void push(node *top, int input)
스택의 top 보여주고 삭제 int pop(node *top)
스택의 top 보여주기 int top(node *top)
스택이 비어있는가 bool empty(const node *top)
스택 초기화 void reset(node *top)
플렉시블 배열 멤버 Flexible array member
프로세스 process
프로그램
신호 signal
<signal.h>
1. SIGINT
2. SIGILL
3. SIGFPE
4. SIGKILL
5. SIGSEGV
6. SIGALRM
7. signal()
8. SIG_DFL
9. SIG_IGN
signal()
신호 처리 매크로
1. SIG_DFL
2. SIG_IGN
SIG_DFL
SIG_IGN