MISRA C:2023

15 October 2024 by Phillip JohnstonMISRA released a new version of their C programming language standard: MISRA C:2023 (formally known as MISRA C Third Edition, Second Revision). The new version encompasses Amendments (AMD) 2-4 and technical corrigendum (TC) 2. You can find the new changes in MISRA C:2012 Amendment 4 (pdf). Commentary on rules and directives below are paraphrased from this document. The new version of the standard now provides coverage for C11 and C18. Receiving heavy focus is C11’s additions of threading support, supporting thread types (e.g., mutexes and condition variables), and atomic operations. New threading-related directives include: 5.1: …

To access this content, you must purchase a Membership - check out the different options here. If you're a member, log in.

Weak Linking

8 May 2020 by Phillip Johnston • Last updated 14 December 2021Weak linking is a technique used with ELF and Mach-O file formats. Symbols can be “weak symbols” or “strong symbols” (the default type). A strong symbol can override a weak symbol of the same name at link time. Under normal linkage with strong symbols, errors are generated if a symbol is not found. An error will also be generated if more than one definition is found for the same symbol. Weak linkage is similar to extern in that it tells the compiler that the function or variable is defined …

To access this content, you must purchase a Membership - check out the different options here. If you're a member, log in.

libc

The C standard library is commonly known as “libc”. This library provides the macros, types, and function implementations for the C programming language.

To access this content, you must purchase a Membership - check out the different options here. If you're a member, log in.

C

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