Certifications
Entry
Course Summary
Basic concepts
Basic data types, operations, and flow control (decision-making statements)
Flow control (loops), int and float types, typecasting, and computer logic
Switch, arrays, pointers, and the basics of strings
Advanced operations on arrays and pointers, memory management, and the basics of functions
Course Summary
Basic concepts
- Installing and using your programming environment
- Introduction to IDE
- Compilation
- Machine, natural, artificial languges
- Variables
- Comments
- Portability
Basic data types, operations, and flow control (decision-making statements)
- primary and derived data types
- arithmetic, logical, and bitwise operators
- priority and binding
- pre-, post-incrementation, decrementation
- basic library functions
- computations
- conditional execution and the if, else if, else keywords
Flow control (loops), int and float types, typecasting, and computer logic
- conditional execution, nested conditions and loops
- type conversions, typecast and its operators
- the while, do…while, and the for loops
- controlling the loop execution: break and continue
- sorting
Switch, arrays, pointers, and the basics of strings
- switch, case, default, control instructions
- arrays (vectors)
- initiators
- pointers, the NULL pointer, pointer arithmetic
- addresses, references, dereferences, the sizeof operator
- pointers vs. arrays
- strings and string manipulation
Advanced operations on arrays and pointers, memory management, and the basics of functions
- array indexing, multidimensional arrays
- arrays of pointers
- the void type
- memory allocation and deallocation: the malloc() and free() functions
- functions, parameters, definitions, declarations, invocations
- creating user-defined functions
- using selected C library functions
Total: 60 Hours (approx. 20 Classes)
Associate
Course Summary
Absolute basics
Data types
Flow control
Arrays
Memory management and structures
Functions
Files and streams
Preprocessor and complex declarations
Course Summary
Absolute basics
- languages: natural and artificial
- machine languages
- high-level programming languages
- obtaining the machine code: compilation process
- writing simple programs
- variables
- integer values in real life and in C
- integer literals
Data types
- floating point values in real life and in C
- float literals
- arithmetic operators
- priority and binding
- post- and pre-incrementation and decrementation
- operators of type op=
- char type and ASCII code
- char literals
- equivalence of int and char data
- comparison operators
- conditional execution and if keyword
- printf() and scanf() functions
Flow control
- conditional execution: the “else” branch
- integer and float types
- conversions
- typecast and its operators
- loops – while, do and for
- controlling the loop execution – break and continue
- logical and bitwise operators
Arrays
- switch: different faces of ‘if’
- arrays (vectors)
- sorting in real life and in a computer memory
- initiators
- pointers
- an address, a reference, a dereference and the sizeof operator
- simple pointer and pointer to nothing (NULL)
- & operator
- pointers arithmetic
- pointers vs. arrays: different forms of the same phenomenon
- using strings
- basic functions dedicated to string manipulation
Memory management and structures
- array indexing
- the usage of pointers: perils and disadvantages
- void type
- arrays of arrays and multidimensional arrays
- memory allocation and deallocation: malloc() and free() functions
- arrays of pointers vs. multidimensional arrays
- structures
- declaring, using and initializing structures
- pointers to structures and arrays of structures
- basics of recursive data collections
Functions
- functions
- how to declare, define and invoke a function
- variables’ scope, local variables and function parameters
- pointers, arrays and structures as function parameters
- function result and return statement
- void as a parameter, pointer and result
- parameterizing the main function
- external function and the extern declarator
- header files and their role
Files and streams
- files vs. streams
- header files needed for stream operations
- FILE structure
- opening and closing a stream, open modes, errno variable
- reading and writing to/from a stream
- predefined streams: stdin, stdout and stderr
- stream manipulation: fgetc(), fputc(), fgets() and fputs() functions
- raw input/output: fread() and fwrite() functions
Preprocessor and complex declarations
- preprocessor
- #include: how to make use of a header file
- #define: simple and parameterized macros
- #undef directive
- predefined preprocessor symbols
- macrooperators: # and ##
- conditional compilation: #if and #ifdef directives
- avoiding multiple compilations of the same header files
- scopes of declarations, storage classes
- user –defined types
- pointers to functions
- analyzing and creating complex declarations
Total: 90 Hours (approx. 30 Classes)
Professional
Course Summary
Evolution of C – from past to eternity
Handling variable number of parameters (stdarg.h)
Low level IO (unistd.h)
Memory and strings (string.h et al.)
Processes and threads
Floats and ints once again (math.h, fenv.h, inttypes.h et
Network sockets – the absolute basics
Miscellaneous
Course Summary
Evolution of C – from past to eternity
- milestones: ANSI C, C89, C95, C99, C11
- obsolete (but still valid) language elements
- how have function declarations changed over time?
- trigraphs and digraphs
- new C11 keywords:
- _Noreturn
- _Alignof and _Alignas
- _Bool
- _Exit
- _Complex
- _Pragma, _ _func_ _
- _Generic
Handling variable number of parameters (stdarg.h)
- calling conventions, passing parameters, stack usage, stack frame, returning a value, recursion
- va_start()
- va_arg()
- va_end()
- va_copy()
- vsprintf(), vprintf(), vfprintf()
- vscanf(), vsscanf(), vfscanf()
- (_ _VA_ARGS_ _)
Low level IO (unistd.h)
- POSIX, API, ABI, WINAPI, etc.
- access()
- open()
- errno
- close()
- read()
- write()
- lseek()
- dprintf()
- stat()
- symlink(), link()
- readlink()
- unlink()
- fcntl(), ioctl()
Memory and strings (string.h et al.)
- manipulating memory blocks
- string manipulation: strchr(), strrchr(), strstr(), strtok()
- qsort(), bsearch()
- aligned_alloc(), calloc(), malloc(), and realloc()
- bcopy()
- memcpy()
- memccpy()
- memmove()
- bzero()
- memset()
- memcmp()
- Internationalization I18N:
- Unicode, UCS, UTF-8 – how to deal with a multilingual environment?
- universal character names
- wide characters supported in different C dialects (wchar.h, wctype.h, …)
- strcoll() and wcscoll()
Processes and threads
- definitions, implementations and history
- thread safety
- system(), getenv(), setenv()
- processes – the Unix way:
- fork()
- exit()
- execxx()
- wait() and waitpid()
- processes – the MS Windows way:
- CreateProcess()
- WaitForSingleObject()
- POSIX threads
- MS Windows threads
- C11 threads (thread.h)
Floats and ints once again (math.h, fenv.h, inttypes.h et
-
al.)
- IEEE-754: a different universe
- NaN, infinity, zero
- floats and doubles – should we trust them?
- numerical anomalies vs precision
- ULP
- what is a pragma?
- FENV_ACCESS pragma
- floating-point exceptions
- rounding
- multi-precision libraries (GMP, MPFR, MPIR)
Network sockets – the absolute basics
- what is a socket? what is a network socket?
- TCP/IP protocol stack, UDP
- connection and connectionless data transmissions
- servers and clients
- big- and little-endians and why you should be aware of them
- socket addressing: IPv4, IPv6, service numbers
- getaddrinfo()
- socket()
- connect()
- bind()
- listen()
- accept()
- send() and recv()
- a simple example of client–server communication
- a simple example of peer-to-peer communication
Miscellaneous
- const variables vs. volatile variables
- goto – why and why not, advantages, disadvantages and limitations
- long (non-local) jumps: setjmp() and longjmp()
- static array indices, designated initializers, compound literals, variable-length arrays, flexible array members, restrict keyword
- sequence points: why ++/-- may sometimes make you crazy
- the asm keyword
- portability issues and undefined behaviors