C programming language

Duration: 5 days

One of the major industry standards in operating systems, Embedded and IoT is the C programming language. It is a general purpose language created in the early 1970s and still developed and support it in the modern days. It is prominent prominent among operating system vendors and developers from its UNIX origins through Apple and Microsoft to FreeBSD, Linux and other contemporary systems. For developers, C is a relatively tiny abstraction layer over the assembly languages of the huge lot of architectures supported by the current C compilers. There are numerous compilers and tools available from GNU GCC and LLVM projects as well as many traditional and modern vendors. The language is relatively simple but the demands on the programmers are rather extensive. They are required to handle memory management and resource allocations and also need to understand the security consequences of pointer arithmetics used even in the basic string operations.

  • Standards and toolchains
    • ANSI/ISO C89, C99, C11
  • Source code organization
    • Language syntax
    • C preprocessor
    • Modules and symbols
    • Functions and statements
  • Build process
    • Compiler
    • Linker
    • Makefiles
  • Values and variables
    • Simple variable types
    • Concept of l-values and r-values
  • Control flow
    • Simple loops
    • Conditions
    • Iteration loops
  • Function arguments
    • Calling conventions
  • Pointer and integer arithmetics
    • 64-bit and 32-bit architectures
    • Bytes, words and unit width
  • String and file operations
    • 8-bit character encoding schemes
    • Unicode, UTF-16 and UTF-8
    • ANSI file modes
    • I/O buffering considerations
  • Floating point arithmetics
    • Precision
    • Rounding errors
  • Arrays and memory allocation
    • Static objects
    • Stack variables
    • Variable sized stack allocations (C99)
    • Dynamic allocations and reallocations
  • Composite objects
    • Complex objects
    • Struct member alignment
    • Union based polymorphy
    • Arrays of structures
    • Optimized data structures
  • Building blocks for OOP
    • Indirect function calls
    • Pointer typecasts
    • Struct member offsets
  • Object oriented architecture
    • Operations table (single interface)
    • Virtual function table (single inheritance)
    • Dynamic object models
    • Hash tables and dynamic symbols
  • Callback architecture
    • Synchronous callback handling
    • Stored callbacks
    • Deferred callbacks
    • Event loop and scheduler