2

Misra ルール 19.7 に関する警告があります。以下の行では、関数のようなマクロよりも関数を使用する必要があります。

#define gOFFSETOF(type, mem) (gOFFSET)((size_t) ((char *)&((type *) 0)->mem - (char *)((type *) 0)))

これをどのように解決すればよいですか?

4

2 に答える 2

2

ルール 19.7 は勧告であるため、コンプライアンス マトリックスにそのように文書化するだけであれば、自由に無視してかまいません。ただし、これは非常に優れたルールであり、そのマクロは非常に安全ではありません。ミッション クリティカルなソフトウェアでは、そのようなコードを記述しないでください。

最善の解決策は、MISRA が言うように、関数のようなマクロを避け、代わりに実際の関数を記述することです。そうすれば、強力なタイピングと安全なコードが得られます。

于 2013-09-04T18:33:10.907 に答える