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

Java Advanced

  28 hours

Java Advanced - one day

  7 hours

Java Fundamentals for Android

  14 hours

Java fundamentals with Maven

  28 hours

Java Intermediate - one day

  7 hours

Java Persistence with Hibernate

  14 hours

Introduction to Programming

  35 hours

Clean Code

  14 hours

Linux Network Programming

  14 hours

Agile and TDD with C

  21 hours

Ansi C for Embedded Systems

  14 hours

Programming in C

  21 hours

Standard Java Security

  14 hours

Unit Testing with JUnit

  21 hours

Unit Testing with C

  35 hours