Course Outline


  • 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


  • C programming experience


  • Programmers
  • Developers
  28 Hours


Related Courses

Programming in C

  21 hours

Ansi C for Embedded Systems

  14 hours

Agile and TDD with C

  21 hours

Unit Testing with C

  35 hours

Introduction to C++ Programming

  28 hours

Introduction to Programming

  35 hours

Clean Code

  14 hours

Linux Network Programming

  14 hours

Java Advanced

  28 hours

Continuous Integration (CI) for Java

  14 hours

Combined C/C++, JAVA and Web Application Security

  28 hours

Advanced Java Security

  21 hours

Combined JAVA, PHP and Web Application Security

  28 hours

Standard Java Security

  14 hours

Java and Web Application Security

  21 hours