30 October 2019 by Phillip Johnston • Last updated 3 April 2026
C is a general-purpose imperative programming language widely used for embedded systems development.
Table of Contents:
- From Around the Web
- Beginners
- Standard Library
- Pointers
- Variadic Functions
- Volatile
- Security & Safety
- Undefined Behavior
- C11
- References
- Tools
- Advanced Techniques
- Bitwise Operations
- Exceptions
- Objects in C
- Information Hiding in C
- Polymorphism and Inheritance in C
- From Embedded Artistry
- Recommended C Libraries
From Around the Web
Beginners
The classic introductory recommendation for programming in C is Brian W. Kernighan and Dennis M. Ritchie’s The C Programming Language.
If you prefer more of a course-based approach, Learn Code the Hard Way has a Learn C the Hard Waycourse. We recommend this course because it provides hands-on demos and examples.
An excellent C crash course can be found on Embedded.fm in the Embedded Wednedsays series:
The following Embedded.fm articles can be used to build upon your new C knowledge:
The Atoms of Confusion website provides information on making confusing code constructs more understandable. Review these common C confusion points to improve your programming abilities. Avoid unclear constructs whenever you’re able to.
For an in-depth test of your C knowledge, try figuring out the Bad C Analysis interview question.
Standard Library
The C standard library is commonly called libc, and occasionally stdlib or cstdlib.
For more information and relevant links, see the dedicated glossary entry.
Articles related to standard library evolution:
Pointers
Pointers are the foundation of C, yet many developers are intimidated by them. These resources will help you better understand pointers.
Variadic Functions
Volatile
Embedded developers will defend their beloved volatile keyword to the death. Make sure you understand what the keyword actually does under the hood!
If in doubt, do not declare a variable volatile. Instead, cast it to volatile in the particular spot where you want to suppress optimizations.
Security & Safety
MITRE outlines common weaknesses found in software written in C. Familiarize yourself with these common security flaws to improve your programming abilities.
No, strncpy() is not a “safer” strcpy() points out the weaknesses with strncpy().
Secure Coding in C and C++ (2nd Edition) (SEI Series in Software Engineering)
Microsoft is working on Checked C, a language extension project that adds static and dynamic (runtime) checking for common errors such as buffer overruns, out-of-bounds memory accesses, and incorrect type casts.
For C coding standards with a focus on safety and security, see:
Undefined Behavior
Undefined behavior abounds in the C programming language, and programmers easily trip over it. Here are some resources to improve your knowledge on undefined behavior:
C11
References
- Cscope is used to browse, search, and refactor a C project’s complete source tree
- cdecl can be used to figure out tricky declarations such as function pointers
Advanced Techniques
The following advanced techniques are reviewed below:
- Bitwise Operations
- Exceptions
- Information Hiding in C
- Objects in C
- Interitance in C
Bitwise Operations
The best resource for bit manipulation routines is Bit Twiddling Hacks. This code is in the public domain and is used in a variety of projects I’ve worked on.
Exceptions
You can implement exception-like behavior in C with libraries. Our favorite is CException, written by the Throw the Switch team.
Objects in C
For information on how to use “objects” in C, please see this Field Atlas entry.
We can take the previous approach to objects in C further by applying information hiding and encapsulation using opaque pointers.
For a practical example that uses this technique, see Creating a Circular Buffer in C and C++.
Polymorphism and Inheritance in C
For information on how to use polymorphism and inheritance in C, please see this Field Atlas entry.
From Embedded Artistry
Recommended C Libraries