C

« Back to Glossary Index

Description


C is a general-purpose imperative programming language widely used for embedded systems development.

Table of Contents:

  1. From Around the Web
    1. Beginners
    2. Standard Library
    3. Pointers
    4. Variadic Functions
    5. Volatile
    6. Security & Safety
    7. Undefined Behavior
    8. C11
    9. References
  2. Tools
  3. Advanced Techniques
    1. Bitwise Operations
  4. Exceptions
  5. Objects in C
  6. Information Hiding in C
  7. Polymorphism and Inheritance in C
  8. From Embedded Artistry
  9. 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

Tools

Advanced Techniques

The following advanced techniques are reviewed below:

  1. Bitwise Operations
  2. Exceptions
  3. Information Hiding in C
  4. Objects in C
  5. 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.

Information Hiding in C

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

cdecl

/ / C, Tools, Uncategorized
Categories: Field Atlas
C_(programming_language) (Wikipedia)
C
Text in light blue serif capital letters on white background and very large light blue sans-serif letter C.
The C Programming Language (often referred to as K&R), the seminal book on C
ParadigmImperative (procedural), structured
Designed byDennis Ritchie
DeveloperDennis Ritchie & Bell Labs (creators); ANSI X3J11 (ANSI C); ISO/IEC JTC1/SC22/WG14 (ISO C)
First appeared1972; 47 years ago (1972)
Stable release
C18 / June 2018; 1 year ago (2018-06)
Typing disciplineStatic, weak, manifest, nominal
OSCross-platform
Filename extensions.c, .h
Major implementations
K&R, GCC, Clang, Intel C, Microsoft Visual C++, Watcom C
Dialects
Cyclone, Unified Parallel C, Split-C, Cilk, C*
Influenced by
B (BCPL, CPL), ALGOL 68, Assembly, PL/I, FORTRAN
Influenced
Numerous: AMPL, AWK, csh, C++, C--, C#, Objective-C, D, Go, Java, JavaScript, Julia, Limbo, LPC, Perl, PHP, Pike, Processing, Python, Ring, Rust, Seed7, Vala, Verilog (HDL), Nim

C (/s/, as in the letter c) is a general-purpose, procedural computer programming language supporting structured programming, lexical variable scope, and recursion, while a static type system prevents unintended operations. By design, C provides constructs that map efficiently to typical machine instructions and has found lasting use in applications previously coded in assembly language. Such applications include operating systems and various application software for computers, from supercomputers to embedded systems.

C was originally developed at Bell Labs by Dennis Ritchie between 1972 and 1973 to make utilities running on Unix. Later, it was applied to re-implementing the kernel of the Unix operating system. During the 1980s, C gradually gained popularity. Nowadays, it is one of the most widely used programming languages, with C compilers from various vendors available for the majority of existing computer architectures and operating systems. C has been standardized by the ANSI since 1989 (see ANSI C) and by the International Organization for Standardization.

C is an imperative procedural language. It was designed to be compiled using a relatively straightforward compiler to provide low-level access to memory and language constructs that map efficiently to machine instructions, all with minimal runtime support. Despite its low-level capabilities, the language was designed to encourage cross-platform programming. A standards-compliant C program written with portability in mind can be compiled for a wide variety of computer platforms and operating systems with few changes to its source code. The language is available on various platforms, from embedded microcontrollers to supercomputers.



« Back to Glossary Index