Synesis Software Training Courses

C Basics, A Practical Crash Course

C is the lingua franca of the programming world, and despite being more than 30 years old it remains one of the most important programming languages in the world. Most UNIX operating systems, including Linux, are mostly/wholly written in C, as well as device drivers, high-performance software and systems programs.

This training course will not turn you into a C programming ninja, but it will give you a solid grounding in the basics of the language and its most interesting, important and dangerous aspects. You will understand pointers when you've completed this course!

Level

Intermediate. Assumes prior experience, preferably with a C-family language (C#, or Java).

Style

Short presentation, followed by intensive interactive sessions.

Duration

2 days: lecture + question & answer session

Material Covered

  • Introduction to C
    • A portable assembler
    • The major features
    • Sink or swim
  • The C Language basics
    • Structures
    • Functions
    • Pointers
    • Typedefs
  • The compiler collection
    • The pre-processor
    • The compiler
    • The linker
  • A whistlestop tour of C's keywords
    • auto
    • break
    • case
    • char
    • continue
    • default
    • do
    • double
    • else
    • enum
    • extern
    • float
    • for
    • goto
    • if
    • inline (C99)
    • int
    • long
    • register
    • restrict (C99)
    • return
    • short
    • signed
    • sizeof
    • static
    • struct
    • switch
    • typedef
    • union
    • unsigned
    • void
    • volatile
    • while
    • _Bool (C99)
    • _Complex (C99)
    • _Imaginary (C99)
  • C's powerful (and dangerous) features
    • Pointers and arrays
    • Function pointers
    • Initialisation (or lack thereof)
    • Resource management (or lack thereof)
    • Error handling (or lack thereof)
    • String types (or lack thereof)
  • The memory model
    • The stack
    • The heap
    • Allocating user-defined types
  • The pre-processor
    • The compilation unit
    • #include
    • #define
    • Macros
  • Packaging
    • libraries
    • shared objects (aka dynamic link-libraries)
  • A whistlestop tour of C's standard library
    • Integer type handling
    • Character type handling
    • Floating-point type handling
    • Complex arithmetic
    • Mathematics
    • Boolean type handling
    • String handling
    • Input/output
    • Localisation
    • Date and time
    • Diagnostics
    • Errors
    • Signal handling
  • When C is the right answer, and when it is not
  • C vs C++
  • Interfacing to other languages
  • Tutorials:
    • The psychoanalytical automaton
    • An HTML encoding library
    • A simple recursive grep
    • Loading and executing of service components