CLP – C Certified Professional Programmer Certification
CLP – C Certified Professional Programmer certification is a professional certificate that measures your ability to accomplish coding and design tasks related to advanced topics of the C programming language, as well as advanced programming techniques, including the library functions and the usage of the preprocessor.
A test candidate should demonstrate sufficient knowledge of the following concepts:
- Handling variable number of parameters ()
- Low level IO ()
- Memory and strings ( et al.)
- Processes and threads
- Floats and ints once again (, , et al.)
- Network sockets –the absolute basics
Exam Information
CLP – C Certified Professional Programmer
Associated certifications:
CLE – C Certified Entry-Level Programmer,
CLA – C Certified Associate Programmer
CLA – C Certified Associate Programmer Certification
65 minutes (exam) + approx. 10 minutes (Non-Disclosure Agreement/Tutorial)
Single-choice questions, multiple-choice questions
1. C Advanced - Skills for ALL (coming soon)
2. C Advanced (Advanced) (Edube, self-enroll/self-study)
CLP – C Certified Professional Programmer Certification: Exam Syllabus
Exam block #1: Evolution of C – from past to eternity
Objectives covered by the block
- 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
Exam block #2: Handling variable number of parameters (<stdarg.h>)
Objectives covered by the block
- 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__)
Exam block #3: Low level IO (<unistd.h>)
Objectives covered by the block
- POSIX, API, ABI, WINAPI, etc.
- access()
- open()
- errno
- close()
- read()
- write()
- lseek()
- dprintf()
- stat()
- symlink(), link()
- readlink()
- unlink()
- fcntl(), ioctl()
Exam block #4: Memory and strings (<string.h> et al.)
Objectives covered by the block
- 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()
Exam block #5: Processes and threads
Objectives covered by the block
- 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>)
Exam block #6: Floats and ints once again (<math.h>, <fenv.h>, <inttypes.h> et al.)
Objectives covered by the block
- 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)
Exam block #7: Network sockets – the absolute basics
Objectives covered by the block
- 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
Exam block #8: Miscellaneous
Objectives covered by the block
- 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
First published: December 9, 2017
Last updated: December 12, 2019
Aligned with Exam CLP-12-01