Misra C の要件のために、同僚の 1 人が使用したいポインター宣言で問題が発生しています。Misra (Safety Critical ガイドライン) では、単なるプログラマーがポインターを使用することはできませんが、配列バイトを操作できるようになります。彼は、バイト配列へのポインターを取得するつもりです (そのため、実際の配列をスタックに渡しません)。
// This is how I would normally do it
//
void Foo(uint8_t* pu8Buffer, uint16_t u16Len)
{
}
// This is how he has done it
//
void Foo(uint8_t (*pu8Buffer)[], uint16_t u16Len)
{
}
呼び出し関数は次のようになります。
void Bar(void)
{
uint8_t u8Payload[1024]
uint16_t u16PayloadLen;
// ...some code to fill said array...
Foo(u8Payload, u16PayloadLen);
}
しかし、Foo() で pu8Buffer にアクセスすると、配列が間違っています。明らかに、期待しているものを渡していません。配列は呼び出し関数では正しいが、Foo() 内では正しくない
彼は、バイト配列へのポインターではなく、バイトへのポインターの配列を作成したと思います。
明確にしたい人はいますか?Foo(&u8Payload, u16PayloadLen); どちらも機能しません。