C and C++


BADMACRO.OFFSETOF : Use of offsetof

Summary

A use of the offsetof preprocessor macro defined in <stddef.h>.

Properties

Class Name Use of offsetof
Significance style
Mnemonic BADMACRO.OFFSETOF
Categories
Misra2004 Misra2004:20.6 The macro offsetof, in library <stddef.h>, shall not be used
AUTOSARC++14 AUTOSARC++14:M18-2-1 The macro offsetof shall not be used.
MisraC++2008 MisraC++2008:18-2-1 The macro offsetof shall not be used.
MisraC++2023 MisraC++2023:21.2.4 The macro offsetof shall not be used
CERT-CPP CERT-CPP:EXP59-CPP Use offsetof() on valid types and members
JSF++ JSF++:18 The macro offsetof, in library <stddef.h>, shall not be used.
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default. To enable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += allow class="Use of offsetof"

Example

/* BADMACRO.OFFSETOF.a.c */
#include <stddef.h>

struct ptrstruct {int x; int y;};

int getoffset(void){
    return offsetof(struct ptrstruct,y); /* 'Use of offsetof' warning issued here */
}
/* BADMACRO.OFFSETOF.b.c */

#define offsetof(a,b) (a+b)

int getoffset2(void){
    return offsetof(1,2);            /* ok: not the offsetof macro defined in <stddef.h> */
}

Relevant Configuration File Parameters

This class is implemented using a BAD_MACRO_* rule set in the general template configuration file.

The following configuration file parameters affect checks for this warning class.