C언어의 마술을 배우는

Advanced C

수강대상

C언어를 알고 있는 학생 및 개발자

선수과정

기초 C 프로그래밍

강의환경

Ubuntu 최신버전
Visual c++ 최신버전

시스템 프로그램, 커널 프로그램, 디바이스 드라이버 개발 등에 필수로 사용되는 언어가 있습니다. 바로 C 언어입니다.
보통 C 언어는 오래된 언어이고 자주 사용되지 않는다고 알려져 있지만 위에서 언급한 것처럼 Application에서 한 발만 들어가면 거의 대부분이 C 언어로 되어 있습니다.
지구상에서 진행된 프로젝트의 90% 이상이 C 언어로 개발되었다는 통계도 있습니다.
누군가는 C 언어로 운영체제, 컴파일러, 디버거 등을 개발하고 있지만 현재 우리는 포인터만 나와도 C 언어를 포기하게 되는 이유는 무엇일까요?
그 이유는 C 언어를 문법으로만 외우려 하기 때문입니다. C 언어의 모든 문법은 시스템 동작과 직접적으로 연결되어 있습니다. 특히 Memory, CPU와 각별합니다.
Memory, CPU와 C 언어를 다루는 책은 많지만, 두 부분의 연계성을 언급하는 책은 거의 없는 게 현실입니다.
있더라도 개념적인 부분만 다루고 실제 Memory나 CPU 레지스터의 움직임을 상세히 언급하지 않고 있습니다.

이에 본 과정에서는

1. 2의 보수를 이용한 정수론의 등장 배경과 CPU의 동작의 원리를 설명합니다.
2. 부동소수점의 등장 배경과 FPU의 동작의 원리를 설명합니다.
3. OF, CF, SF, ZF를 이용한 제어문의 동작의 원리를 설명합니다.
4. 비트 연산자 활용의 역사적 발전 과정에 대해 구현하고 설명합니다.
5. 배열과 포인터의 정확한 정의와 관계를 설명합니다.
6. 함수 호출의 모든 것을 다룹니다.
7. 구조체의 등장 배경과 활용방안에 대해 설명합니다.
8. 파일 입출력 구조와 원리를 설명합니다.
9. C 언어 고급 테크닉을 소개합니다.

전체적으로는 C 언어와 Memory, CPU 동작 그림을 통해 원리를 이해합니다.
C 언어의 문법이 어떻게 지금에 이르렀는 지를 단계별로 설명합니다.
역사적으로 각 단계의 문제점, 증상을 알아보고 해결책을 알아봅니다.
현재 오픈 소스 진영에서 사용하고 있는 다양한 C 언어의 고급 테크닉을 다룹니다.
본 강의는 커널 소스 및 디바이스 드라이버 소스, 안드로이드 등 각종 오픈 소스를 분석 및 패치하려는 모든 개발자에게 권하며, C 언어를 처음 입문하는 개발자에게도 개념 이해 차원에서 추천하는 바입니다.

  • Section1. Type
    • 정수의 내부구조 및 실수의 내부구조를 분석하고 역사적으로 발전해온 단계를 알아본다.
  • Section2. 제어문
    • 모든 제어문에 사용되는 비교연산에 관하여 알아 본다.
    • unsigned와 signed의 CPU 내의 처리를 자세히 살펴본다.
    • CPU 내의 flags 레지스터의 정확한 동작을 알아본다.
  • Section3. 비트 연산자의 활용
    • 비트 연산자를 활용하여 메모리 최적화를 이루는 테크닉을 단계별로 알아본다.
    • 배열을 이용하여 비트 자료구조를 확장하는 기법을 알아 본다.
    • 비트 연산의 라이브러리 구현 기법을 다룬다.
  • Section4. 배열과 포인터
    • 배열과 포인터의 정확한 타입, 공통점과 차이점을 알아 본다.
    • 배열을 포인터에 대입할 때 어떤 타입의 포인터를 선언해야 하는지 원리를 알아본다.
    • 다중 포인터의 구성 원리와 활용에 대해 단계별로 알아 본다.
  • Section5. 함수와 포인터
    • 함수의 정확한 타입을 알아보고 함수를 포인터에 대입할 때 포인터 타입을 어떻게 선언해야 하는지 알아본다.
    • 함수 포인터의 여러 활용법을 예제 중심으로 살펴본다.
  • Section6. 함수 호출의 원리
    • 함수에서 사용하는 call, ret 등의 기계어 코드의 동작을 알아본다.
    • C 언어의 함수 호출규약( cdecl )을 상세히 알아본다.
    • 함수의 인자 전달, 리턴값처리, 지역변수의 할당 동작을 어셈코드 분석으로 알아본다.
  • Section7. 구조체
    • 구조체 등장 배경을 데이터 캡슐화 관점으로 해석한다.
    • 구조체의 다양한 활용을 예제를 통해 설명한다.
    • 특수한 구조체인 비트필드 구조체와 공용체의 활용 기법을 알아 본다.
  • Section8. 파일
    • 표준 파일 입출력에서 사용하는 라이브러리 버퍼의 동작 및 관리 기법을 알아본다.
    • EOF의 처리 기법을 라이브러리 개발자 관점에서 설명한다.
  • Section9. C 언어 고급 테크닉
    • 매크로의 다양한 활용 기법을 설명한다.
    • ^ 연산자를 이용한 최적화 기법을 알아본다.
    • 조건부 컴파일을 이용한 디버깅 기법을 알아본다.
    • Assert 의 구현 기법을 단계별로 설명한다.
    • setjmp와 longjmp를 이용한 C 언어 예외처리 기법을 단계별로 설명한다.