Course Outline
Introduction
- Overview of C Features and Applications
Setting Up the Development Environment
- Selecting an IDE
- Configuring the compiler
Writing a Sample Program
- Defining the problem
- Coding according to requirements
Defining Variable and Function Scope
- Understanding scope, visibility, and lifetime
- Working with storage classes: auto, extern, register, static
Managing Data in C Programs
- Beyond primitive data types
- Working with advanced data types: structures, linked lists, etc.
- Storing different data types in the same memory location
Modifying Variable Properties
- Beyond type modifiers
- Working with type qualifiers: constant, volatile, etc.
Manipulating Bits in C
- Working with data smaller than a byte
- Using bit manipulation operators
Controlling Program Flow
- Beyond simple sequencing
- Utilizing the goto statement
Reading and Writing Data
- Review of Input/Output functions
- Improving output readability
Developing Cross-Platform Code
- Understanding compiler directives
- Conditionally compiling code
Enhancing Program Performance
- Macros vs. functions
- Defining macros to execute program fragments
Dynamic Memory Allocation
- Advantages of pointers: execution speed
- Function pointers
- Accessing memory and manipulating addresses
Debugging C Programs
- Advanced techniques for checking, detecting, and correcting errors
- Using gdb (Gnu Debugger)
Creating a Static Library
- How a static library is linked into an executable file
- Creating a static library
Creating a Shared Library
- Static vs. shared (dynamic) libraries
- How a shared library is linked and loaded into memory at runtime
- Creating a shared library
Abstracting Data in Programs
- 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 using 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.
Running C Programs in Parallel
- Executing different parts of a program concurrently via multithreading
- Writing threads
Advanced Networking Programming
- Review of TCP, UDP, IP, and other dominant protocols
- Serving multiple ports, handling abrupt network disruptions, etc.
- Developing robust socket APIs
Towards High-Quality Code
- Peer code review and parallel programming
- The importance of iterative coding (refactoring)
Summary and Conclusion
Requirements
- Experience with C programming
Target Audience
- Programmers
- Developers
Testimonials (2)
the exercises and the methodology
Javier MIllan Rios - si
Course - Advanced C Programming
An interesting and broad scope