Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Misra ルール 19.7 に関する警告があります。以下の行では、関数のようなマクロよりも関数を使用する必要があります。
#define gOFFSETOF(type, mem) (gOFFSET)((size_t) ((char *)&((type *) 0)->mem - (char *)((type *) 0)))
これをどのように解決すればよいですか?
ルール 19.7 は勧告であるため、コンプライアンス マトリックスにそのように文書化するだけであれば、自由に無視してかまいません。ただし、これは非常に優れたルールであり、そのマクロは非常に安全ではありません。ミッション クリティカルなソフトウェアでは、そのようなコードを記述しないでください。
最善の解決策は、MISRA が言うように、関数のようなマクロを避け、代わりに実際の関数を記述することです。そうすれば、強力なタイピングと安全なコードが得られます。