Course Outline
Introduction
- Overview of C Features and Applications
Preparing the Development Environment
- Choosing an IDE
- Configuring the compiler
Writing a Sample Program
- Defining the problem
- Coding according to requirements
Defining the Scope of Variables and Functions
- Understanding scope, visibility and lifetime
- Working with storage classes: auto, extern, register, static
Managing Data in a C Program
- Beyond primitive data types
- Working with advanced data types: structures, linked lists, etc.
- Storing different data types in the same memory location
Modifying the Properties of a Variable
- Beyond type modifiers
- Working with type qualifiers: constant, volatile, etc.
Manipulating Bits in C
- Working with data smaller than a byte
- Working with bit manipulation operators
Controlling the Flow of Your Program
- Beyond sequencing
- Using the goto statement
Reading and Writing Data
- Recap of Input/Output functions
- Improving output readability
Developing Cross-Platform Code
- Understanding compiler directives
- Compiling code conditionally
Enhancing Program Performance
- Macros vs functions
- Defining macros to run program fragments
Dynamically Allocating Memory
- Advantage of using pointers: execution speed
- Pointers to functions
- Accessing memory and manipulating the address
Debugging a C Program
- Advanced techniques for checking, detecting and correcting errors
- Working with gdb (Gnu Debugger)
Creating a Static Library
- How a static library is linked into executable file
- Creating a static library
Creating a Shared Library
- Static libraries vs shared libraries (dynamic libraries)
- How a shared library is linked and loaded into memory at runtime
- Creating a shared library
Abstracting Data in Your Program
- Overview of interface, specification, and implementation
- Creating an abstract data type
- Regression testing an abstract data type
Searching and Sorting Data
- Searching arrays using linear search, binary search, etc.
- Sorting arrays usig selection sort, insertion sort, bubble sort
Interprocess Communication and Signals
- Understanding processes, sockets, and signals
- Implementing IPC using shared files, shared memory, pipes, message queues, sockets, semaphores, etc.
Making Your C Program Run in Parallel
- Running different parts of a program concurrently through multithreading
- Writing a thread
Advanced Networking Programming
- Recap of TCP, UDP, IP and other dominant protocols
- Serving multiple ports, surviving abrupt network disruptions, etc.
- Writing powerful socket APIs
Towards High-Quality Code
- Peer code review and parallel programming
- The importance of iterative coding (refactoring)
Summary and Conclusion
Requirements
- C programming experience
Audience
- Programmers
- Developers
Testimonials
I really liked that there were a lot of practical exercises in which you could put the learned immediately into action.
Daniel Bubla
The atmosphere was very nice, much more relaxed conversation than classic teaching style. Also, several of the techniques, especially those I doubt would hold up or be worth it (effort-gain-wise) under “real world” work conditions (as mentioned above) made me reflect on my coding style, and why I do or don't do some things (both on topics presented int he course and related ones), which I don't do that often (needed the impetus) but is really useful, even if I come to the conclusion that my style already suits my needs well.