C Programming Language
Duration: 5 daysOne 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.
This workshop is intended for groups of developers switching from another programming language as well as for active C developers who would benefit from revisiting the foundations of the language and adopting concepts that they haven't yet mastered.
- Standards and toolchains
- ANSI/ISO C89, C99, C11/C18
- 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